【问题标题】:How to skip controller in url for a default controller?如何跳过默认控制器的 url 中的控制器?
【发布时间】:2018-07-26 08:44:49
【问题描述】:

我在 ASP.NET Core 2.1 MVC 中有以下地图路线:

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");

HomeController 有动作

  • Index 显示默认站点页面
  • Projects 显示项目列表
  • Project 显示特定项目的详细信息(将其 id 作为输入)

项目中还有其他控制器。

我想以如下方式更新路由:

  • Home 控制器操作在 URL 中没有 Home 的情况下被映射。我不想列出路由定义中的所有操作,规则应该是通用的。
    • HomeController.Index => /
    • HomeController.Projects => /Projects(或更好的小写字母projects
    • HomeController.Project(id: 4) => /Project/4(或更好的小写字母project/4
  • 其他控制器遵循标准 ASP.NET 路由机制Controller/Action

实现此目的的推荐方法是什么?有可能吗?

【问题讨论】:

  • “列出路由定义中的所有操作”是什么意思?使用您当前的地图路线,您无需指定其他任何内容。控制器及其操作将自动具有路由 {myurl}/ControllerName/ActionName
  • 我的意思是我不想为 /projects 设置一个规则,为 /project/4 设置另一个规则,为 Home 控制器中的其他操作设置另一个规则(我没有列出所有),相反,我更喜欢有一个规则将匹配 Home 控制器中的所有操作并生成一个没有 Home 控制器的 url。默认规则将为 HomeController.Products 操作生成 /Home/Products,但应改为 /Products。

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:
routes.MapRoute(
    name: "other",
    template: "{controller}/{action}/{id?}");

routes.MapRoute(
    name: "home",
    template: "{action=Index}/{id?}",
    defaults: new { controller = "Home" });

【讨论】:

    【解决方案2】:

    要定义默认控制器而不在 url 中指定,只需将其添加到 'defaults' 参数中

    要将这种路由组合到一个规则中,使用相同的基本 url 会更简洁,即使用 /Products/Products/4。然后你可以使用:

    routes.MapRoute(
        name: "products",
        template: "Products/{id?}",
        defaults: new { controller = "Home", Action = "Products" });
    

    对于你的结构,这样的东西应该可以工作:

    routes.MapRoute(
        name: "products",
        template: "{Action:regex(^(Products|Product)$)/{id?}",
        defaults: new { controller = "Home" });
    

    要处理与此规则不匹配的 url,包括基本 /,请在 products-route 之后添加原始默认路由。

    routes.MapRoute(
        name: "products",
        template: "{Action:regex(^(Products|Product)$)/{id?}",
        defaults: new { controller = "Home" });
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多