是否可以将参数作为路由的第一个节点?
我希望在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,如果不删除默认路由,这是不可能的,因为路由引擎无法消除这两个 url 之间的歧义:
假设您希望第一个匹配
{a}/{b}
和第二个{controller }/{动作}
。即使您对示例中的路线进行硬编码,home/index
也将始终与第一个路线{a}/{b}
匹配。此外,如果
a
和b
可以是任意字符串,那么如果将它们作为查询字符串参数传递会更好。No this is not possible without removing the default route because the routing engine cannot disambiguate between those two urls:
Assuming you want the first to match
{a}/{b}
and the second{controller}/{action}
. Even if you hardcode the route as in your examplehome/index
will always match the first route which is{a}/{b}
.Also if
a
andb
can be arbitrary strings it would be better if they were passed as query string parameters.