【发布时间】:2017-02-12 20:25:09
【问题描述】:
我正在开发一个项目,该项目涉及托管在单个 .Net Core 1.0 Web 应用程序上的多个单页应用程序。
目标是对每个 SPA 进行分区,以便它们都独立存在,每个都有自己的视图和控制器。
在 Startup.cs 中,我使用 Microsoft.AspNetCore.SpaServices MapSpaFallbackRoute 传递指向 SPA 的深层链接(在本例中为 Angular 2),因此 MVC 不会混淆并在页面刷新时引发 404。
当我在 MapSpaFallbackRoute 中手动设置控制器时,我一次只为一个 SPA 工作,但我想不出一种方法为每个 SPA 控制器有条件地设置它。
我假设 Mapwhen() 和 Run() 的组合可以让我到达我需要的地方,但我似乎无法让语法正确。
假设 SPA 被命名为“Dash1”、“Dash2”等。以下后备路线非常适合 Dash1:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute("spa-fallback", new { controller = "Dash1", action = "Index" });
});
我试过了:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
app.Map("/Dash1", HandleDash1);
}
private static void HandleDash1(IApplicationBuilder app)
{
app.UseMvc(routes =>
{
routes.MapSpaFallbackRoute("spa-fallback", new { controller = "Dash1", action = "Index" });
});
}
}
...但是当我导航到 Dash1 并尝试刷新页面时,浏览器会在所有 http 请求之前添加“/Dash1/”并破坏所有内容。
【问题讨论】:
-
这里完全是在猜测,但您在第一种方法中尝试过
routes.MapSpaFallbackRoute("{controller}/spa-fallback", new { action = "Index" });吗? -
我试了一下,但页面刷新仍然出现 404。第一个字符串参数只是路线的名称,但似乎应该可以这样做;只需将当前控制器注册为后备。
标签: angular asp.net-core-mvc single-page-application asp.net-core-1.0 asp.net-core-middleware