繁体   English   中英

如果控制器存在,我如何配置 ASP.NET Core 路由以路由到控制器(没有可选操作),然后回退到默认路由?

[英]How can I configure ASP.NET Core routing to route to controllers (without optional action) if they exist, then fall back to a default route?

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

目的是让路由按以下顺序工作:

  1. 区域路线
  2. 控制器路由(有/没有动作)
  3. 默认路由 - 通过StaticPages控制器进行静态页面查找

我配置了以下路由,但无法实现上述配置。

如果我导航到一个静态页面(即/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();
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM