【问题标题】:MapSpaFallbackRoute on Startup ASP .NET Core启动 ASP .NET Core 上的 MapSpaFallbackRoute
【发布时间】:2018-04-05 10:11:59
【问题描述】:

我在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 的正确方法是什么,我想在管理区域使用 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?}");
        });

感谢您的帮助

【问题讨论】:

标签: asp.net-core routes .net-core asp.net-mvc-areas


【解决方案1】:

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 =>
{

【讨论】:

  • 我已经更新了我的问题,我添加了一些关于我的代码的详细信息,你的解决方案仍然对我不起作用,我错过了什么吗?
  • @RipasFilqadar 请检查更新。老实说,我不知道为什么它会以这种方式工作并创建了一个separate SO question about this
【解决方案2】:

搜索此问题后,我意识到 Dotnet core 3 不支持 MapSpaFallbackRoute 方法,因此要解决此问题,您应该在终端 Dotnet 上使用此命令手动添加 Spa 包

添加包 Microsoft.AspNetCore.SpaServices --version 3.1.16

您可以在此链接查看版本

NuGet Gallery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多