首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何跳过默认控制器的url中的控制器?

如何跳过默认控制器的url中的控制器?
EN

Stack Overflow用户
提问于 2018-07-25 20:06:31
回答 2查看 516关注 0票数 1

我在ASP.NET Core2.1MVC中有一个map路由:

代码语言:javascript
复制
routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");

HomeController具有操作

  • Index显示默认站点page
  • Projects显示projects
  • Project列表显示有关特定项目的详细信息(以其id作为输入)

项目中还有其他控制器。

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

在url中没有Home的情况下映射

  • Home控制器动作。我不想列出路由定义中的所有操作,规则应该是通用的。
    • HomeController.Index /
    • HomeController.Projects projects)
    • HomeController.Project(id: 4) /Projects (或在小写project/4)

中更好)/

  • HomeController.Projects => => /Projects(在小写project/4)

中更好

  • 其它控制器遵循标准的ASP.NET路由机制Controller/Action.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-25 20:48:49

代码语言:javascript
复制
routes.MapRoute(
    name: "other",
    template: "{controller}/{action}/{id?}");

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

Stack Overflow用户

发布于 2018-07-25 20:45:08

要定义一个默认控制器而不在url中指定它,只需将它添加到‘default’参数中即可。

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

代码语言:javascript
复制
routes.MapRoute(
    name: "products",
    template: "Products/{id?}",
    defaults: new { controller = "Home", Action = "Products" });

在你的结构中,类似这样的东西应该是有效的:

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

要处理不符合此规则的urls,请在products- /之后添加原始默认路由。

代码语言:javascript
复制
routes.MapRoute(
    name: "products",
    template: "{Action:regex(^(Products|Product)$)/{id?}",
    defaults: new { controller = "Home" });
routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51518472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档