如何在 ASP.NET 核心项目中为 MVC 和 SignalR 配置路由?
How do I configure routing for MVC and SignalR in an ASP.NET Core project?
我正在尝试使用 ASP.NET Core 2.1.0-preview1 和 ASP.NET Core SignalR 1.0.0-alpha1 以及 Angular4 客户端构建网络应用程序。到目前为止,我已经能够蒙混过关,实际上可以从客户端打开一个 SignalR 网络套接字连接。不过,这是有代价的,这是我的 Startup.cs
:
的摘录
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
/*routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });*/
});
app.UseWebSockets();
app.UseSignalR(routes =>
{
routes.MapHub<Feed>("feed");
});
如您所见,我必须禁用 "spa-fallback" 路由,如果我不这样做,SignalR 将接收纯 HTML 而不是 JSON。当然,这样做的缺点是我现在必须输入准确的 URL(例如 localhost:12345/home/index
),这很糟糕。
所以我的问题是,如何让 MVC 路由和 SignalR 路由并存?
您需要在 UseMvc
之前放置 UseSignalR
否则后备路由将在 UseSignalR
添加的路由之前注册。
我正在尝试使用 ASP.NET Core 2.1.0-preview1 和 ASP.NET Core SignalR 1.0.0-alpha1 以及 Angular4 客户端构建网络应用程序。到目前为止,我已经能够蒙混过关,实际上可以从客户端打开一个 SignalR 网络套接字连接。不过,这是有代价的,这是我的 Startup.cs
:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
/*routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });*/
});
app.UseWebSockets();
app.UseSignalR(routes =>
{
routes.MapHub<Feed>("feed");
});
如您所见,我必须禁用 "spa-fallback" 路由,如果我不这样做,SignalR 将接收纯 HTML 而不是 JSON。当然,这样做的缺点是我现在必须输入准确的 URL(例如 localhost:12345/home/index
),这很糟糕。
所以我的问题是,如何让 MVC 路由和 SignalR 路由并存?
您需要在 UseMvc
之前放置 UseSignalR
否则后备路由将在 UseSignalR
添加的路由之前注册。