Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ASP.NET核心路由配置为路由到控制器(无可选操作)(如果控制器存在),然后返回到默认路由?_C#_Asp.net Core Mvc - Fatal编程技术网

C# 如何将ASP.NET核心路由配置为路由到控制器(无可选操作)(如果控制器存在),然后返回到默认路由?

C# 如何将ASP.NET核心路由配置为路由到控制器(无可选操作)(如果控制器存在),然后返回到默认路由?,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我有一个控制器,它为“静态页面”提供一个键列,允许输入URL。例如,http://hostname/about应路由到名为StaticPages的控制器和任何其他未链接到控制器的URL(有或无操作) 目的是使布线按以下顺序工作: 区域路线 控制器路由(有/无操作) 默认路由-通过StaticPagescontroller进行静态页面查找 我已配置以下路由,但无法实现上述配置 如果我导航到一个静态页面(即/about),这是可行的,但是如果我导航到一个没有指定操作的控制器(即/blog),我会得到

我有一个控制器,它为“静态页面”提供一个
列,允许输入URL。例如,
http://hostname/about
应路由到名为
StaticPages
的控制器和任何其他未链接到控制器的URL(有或无操作)

目的是使布线按以下顺序工作:

  • 区域路线
  • 控制器路由(有/无操作)
  • 默认路由-通过
    StaticPages
    controller进行静态页面查找
  • 我已配置以下路由,但无法实现上述配置

    如果我导航到一个静态页面(即
    /about
    ),这是可行的,但是如果我导航到一个没有指定操作的控制器(即
    /blog
    ),我会得到一个404,它建议跳转到底部路由模式。如果我使用一个控制器和一个动作(即
    /blog/index
    ),这会正常工作,因此它似乎需要一个动作,我宁愿默认设置为
    index

    app.UseEndpoints(endpoints =>
            {
    
                endpoints.MapAreaControllerRoute(
                    "admin-area",
                    "admin",
                    "admin/{controller}/{action}/{Id?}");
    
                endpoints.MapControllerRoute(
                    name: "admin-users",
                    pattern: "admin/users/{action=Index}/{Id?}",
                    defaults: new { controller = "UserAdmin", action = "Index" });
               
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action=Index}/{id?}");
    
                endpoints.MapControllerRoute(
                   name: "StaticPage-Default",
                   pattern: "{key}",
                   defaults: new { controller = "StaticPages", action = "Details" });
    
    
                endpoints.MapRazorPages();
            });
    

    如何实现所描述的配置?

    似乎,将顶部的管理部分转换为一个区域(正确-我没有正确配置),并用以下代码替换代码,使我能够实现所需的行为,尽管我不完全清楚为什么

    app.UseEndpoints(endpoints =>
            {
    
                endpoints.MapControllerRoute(
                    name: "admin-area",
                    pattern: "{area:exists}/{controller=Dashboard}/{action=Index}/{id?}");
    
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
    
                endpoints.MapControllerRoute(
                   name: "StaticPage-Default",
                   pattern: "{key}",
                   defaults: new { controller = "StaticPages", action = "Details" });
    
                endpoints.MapRazorPages();
            });
    

    看起来,将顶部的管理部分转换为一个区域(正确-我没有正确配置),并用下面的代码替换代码,使我能够实现所需的行为,尽管我不完全清楚为什么

    app.UseEndpoints(endpoints =>
            {
    
                endpoints.MapControllerRoute(
                    name: "admin-area",
                    pattern: "{area:exists}/{controller=Dashboard}/{action=Index}/{id?}");
    
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
    
                endpoints.MapControllerRoute(
                   name: "StaticPage-Default",
                   pattern: "{key}",
                   defaults: new { controller = "StaticPages", action = "Details" });
    
                endpoints.MapRazorPages();
            });
    

    我不认为仅仅通过路由表就可以实现这一点。根据您的描述和路由表,
    /about
    /blog
    都匹配
    default
    StaticPage default
    路由,后者更适合。我不认为单靠路由就可以解决这个问题——也许在
    StaticPage
    controller中有一些额外的工作/重定向,这实际上是你的全部。或者,如果只有几个控制器,例如
    /blog
    ,则可以显式列出它们:
    模式:“/blog/{action=Index}/{id?}”
    ,或者在每个控制器上使用
    [Route]
    属性。我看不到更好的解决方案…我不认为仅仅通过路由表就可以实现这一点。根据您的描述和路由表,
    /about
    /blog
    都匹配
    default
    StaticPage default
    路由,后者更适合。我不认为单靠路由就可以解决这个问题——也许在
    StaticPage
    controller中有一些额外的工作/重定向,这实际上是你的全部。或者,如果只有几个控制器,例如
    /blog
    ,则可以显式列出它们:
    模式:“/blog/{action=Index}/{id?}”
    ,或者在每个控制器上使用
    [Route]
    属性。我看不到更好的解决方案。。。