我在Net Core App
上有一个名为Admin
的区域,在MapSpaFallbackRoute
设置启动时,我想这样设置,
app.UseMvc(routes =>
{
routes.MapSpaFallbackRoute(
name: "spa-fallback-admin",
defaults: new { area="Admin", controller = "Home", action = "Index" });
});
这是定义MapSpaFallbackRoute
的正确方法吗?我怀疑MapSpaFallbackRoute
有属性 area ,
我一直试试这个,我的应用程序返回404(未找到)。
那么,定义MapSpaFallbackRoute
的正确方法是什么,我希望在Admin区域使用HomeController,使用Index action
这是我的完整代码,我想用路径管理员请求,管理员区域上的控制器应该处理。
app.MapWhen(context => context.Request.Path.Value.StartsWith("/admin"), builder =>
{
builder.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{area=Admin}/{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback-admin",
defaults: new { area="Admin", controller = "Home", action = "Index" });
});
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
感谢您的帮助
答案 0 :(得分:0)
MapSpaFallbackRoute
做的是允许定义路由参数的默认值来处理404个案例。
现在问题:是的,MVC routing (both attribute/convention) supports {area}
作为路由参数,因此您可以编写上面的代码来定义默认值。
您没有显示路由设置,因此我假设您的主要问题是您未在路由模板中指定{area}
参数。
例如,如果考虑约定路由,则以下内容应该有效:
app.UseMvc(routes => {
routes.MapRoute("default", "{area}/{controller}/{action}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback-admin",
defaults: new { area="Admin", controller = "Home", action = "Index" });
});
更新问题:
尝试使用.UseWhen
代替.MapWhen
:
app.UseWhen(context => context.Request.Path.Value.StartsWith("/admin"), builder =>
{
答案 1 :(得分:0)
在搜索此问题后,我意识到 Dotnet core 3 不支持 MapSpaFallbackRoute
方法,因此要解决此问题,您应该在终端 Dotnet 上使用此命令手动添加 Spa 包
添加包 Microsoft.AspNetCore.SpaServices --version 3.1.16
您可以在此链接查看版本