启动时的 MapSpaFallbackRoute ASP .NET Core
MapSpaFallbackRoute on Startup ASP .NET Core
我在 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,
我一直在尝试这个,我的应用程序 return 404(未找到)。
所以,定义 MapSpaFallbackRoute
的正确方法是什么,我想在管理区域使用 HomeController,并使用索引操作
这是我的完整代码,我想用路径管理请求,管理区域的控制器应该处理它。
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?}");
});
感谢您的帮助
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 =>
{
搜索此问题后,我意识到 Dotnet 核心 3 不支持 MapSpaFallbackRoute
方法,因此要解决此问题,您应该在终端 Dotnet
上使用此命令手动添加 Spa 包
add package Microsoft.AspNetCore.SpaServices --version 3.1.16
你可以在这里查看版本link
我在 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,
我一直在尝试这个,我的应用程序 return 404(未找到)。
所以,定义 MapSpaFallbackRoute
的正确方法是什么,我想在管理区域使用 HomeController,并使用索引操作
这是我的完整代码,我想用路径管理请求,管理区域的控制器应该处理它。
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?}");
});
感谢您的帮助
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 =>
{
搜索此问题后,我意识到 Dotnet 核心 3 不支持 MapSpaFallbackRoute
方法,因此要解决此问题,您应该在终端 Dotnet
add package Microsoft.AspNetCore.SpaServices --version 3.1.16
你可以在这里查看版本link