我对未本地化的路由有一个全能,但是,这会在刷新页面时中断Angular:
routes.MapRoute(
name: "default",
template: "{culture:lang}/{controller=Home}/{action=Index}/{id?}");
routes.MapGet("{*path}", ctx =>
{
object path = ctx.GetRouteValue("path") ?? string.Empty;
string culturedPath = $"/en/{path}";
ctx.Response.Redirect(culturedPath);
return Task.CompletedTask;
});
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { culture = "en", controller = "Home", action = "Index" });
如果我撤销MapGet
和MapSpaFallbackRoute
的订单,则整个应用程序会中断,因为/
会无限制地映射到回退路由。
有没有办法可以更改{*path}
(或其代码),以便在文化已经存在时它不会映射到那个?当然,我可以检查path
是否已经具有这种文化,但这并不能解决如何处理"不能处理"网址。
我的目标是:
/
=> /en/Home/Index
(MVC,有效)/en/home/login
=> HomeController
。Login
(MVC,有效)/en
=> HomeController
。Index
(MVC,有效,正确加载Angular)/en/profile
=> ProfileComponent
(Angular,休息)答案 0 :(得分:0)
我找到了一个简单的答案:添加一个与文化相匹配但不是controller
/ action
的路线,并将其重定向到HomeController
。Index
。
routes.MapRoute(
name: "default",
template: "{culture:lang}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "forAngular",
template: "{culture:lang}/{*path}",
defaults: new { controller = "Home", action = "Index" }); // Contains the Angular app
routes.MapGet("{*path}", ctx =>
{
object path = ctx.GetRouteValue("path") ?? string.Empty;
string culturedPath = $"/en/{path}";
ctx.Response.Redirect(culturedPath);
return Task.CompletedTask;
});