是否可以将参数作为路由的第一个节点?

发布于 2024-10-05 00:51:52 字数 500 浏览 6 评论 0原文

我希望在 ASP.NET MVC 中有以下类型的路由。

  • {a}/{b} -> SiteController.Search(a, b) (其中 a 和 b 是任意字符串)

同时仍然有一个 HomeController

  • home/index -> HomeController.Index()

这可能吗?如果家庭控制器路由是硬编码的,是否可能? IE:

routes.MapRoute(
            "Home",                   // Route name
            "Home/{action}",          // URL with parameters
            new { action = "Index" }  // Parameter defaults
        );

I'd like to have the following type of route in ASP.NET MVC.

  • {a}/{b} -> SiteController.Search(a, b) (where a and b are arbitrary strings)

While still having a HomeController

  • home/index -> HomeController.Index()

Is this possible? Is it possible if the home controllers routes are hardcoded?
ie:

routes.MapRoute(
            "Home",                   // Route name
            "Home/{action}",          // URL with parameters
            new { action = "Index" }  // Parameter defaults
        );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静待花开 2024-10-12 00:51:52

不,如果不删除默认路由,这是不可能的,因为路由引擎无法消除这两个 url 之间的歧义:

foo/bar
home/index

假设您希望第一个匹配 {a}/{b} 和第二个 {controller }/{动作}。即使您对示例中的路线进行硬编码,home/index 也将始终与第一个路线 {a}/{b} 匹配。

此外,如果 ab 可以是任意字符串,那么如果将它们作为查询字符串参数传递会更好。

No this is not possible without removing the default route because the routing engine cannot disambiguate between those two urls:

foo/bar
home/index

Assuming you want the first to match {a}/{b} and the second {controller}/{action}. Even if you hardcode the route as in your example home/index will always match the first route which is {a}/{b}.

Also if a and b can be arbitrary strings it would be better if they were passed as query string parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文