在 ASP.NET Core 3.0 中,SignalR 采用了终结点路由。 作为此更改的一部分,UseSignalRUseConnections某些相关方法被标记为已过时。 在 ASP.NET Core 5.0 中,删除了这些过时的方法。 有关方法的完整列表,请参阅 受影响的 API。
有关此问题的讨论,请参阅 dotnet/aspnetcore#20082。
已引入的版本
5.0 预览版 3
旧行为
可以在中间件管道中使用 UseSignalR 或 UseConnections 方法注册 SignalR 中心和连接处理程序。
新行为
应使用 UseEndpoints 上的 MapHub 和 MapConnectionHandler 扩展方法在 IEndpointRouteBuilder 中注册 SignalR 集线器和连接处理程序。
更改原因
旧方法具有自定义路由逻辑,这些逻辑未与 ASP.NET Core 中的其他路由组件交互。 在 ASP.NET Core 3.0 中,引入了名为终结点路由的新常规用途路由系统。 终结点路由使 SignalR 能够与其他路由组件交互。 切换到此模型可让用户实现终结点路由的全部优势。 因此,已删除旧方法。
建议的措施
删除项目的 UseSignalR 方法中调用 UseConnections 或 Startup.Configure 的代码。 在调用 MapHub 的主体中,分别将其替换为对 MapConnectionHandler 或 UseEndpoints 的调用。 例如:
旧代码:
app.UseSignalR(routes =>
{
routes.MapHub<SomeHub>("/path");
});
新代码:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
通常,以前的 MapHub 和 MapConnectionHandler 调用几乎不需要更改即可从 UseSignalR 和 UseConnections 的主体直接转移到 UseEndpoints。