是否可以在 ASP.NET MVC 路由中包含所有后跟其他参数的参数?
我想创建一个看起来像这样的路由:
routes.Add(new Route("{*url}/{action}.do/{id}", new MvcRouteHandler())
这可能吗?看起来像包罗万象必须放在最后?
I would like to create a route that looks something like this:
routes.Add(new Route("{*url}/{action}.do/{id}", new MvcRouteHandler())
Is this possible? It seems like the catchall has to be last?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
包罗万象的参数必须是路由中的最后一个参数,因为它表示“匹配 URL 剩余部分的全部”。
不过,您可以通过只使用包罗万象并使用自定义 MyRouteHandler 而不是 MvcRouteHandler 来伪造它。您的自定义路由处理程序只需操作 RouteContext,将 action 和 id 从 URL 中分离出来,然后再将其传递给 MvcRouteHandler 进行处理。
The catch-all has to be the last parameter in the route, as it says "match the entirety of what remains of the URL."
You could fake it, though, by having just the catchall and using a custom MyRouteHandler instead of the MvcRouteHandler. Your custom route handler would just manipulate the RouteContext to split the action and id back out of the URL before passing it to the MvcRouteHandler for processing.
来自 斯科特顾:
我认为您可以在catch-all之后注册,但它永远不会被击中,因为catch-all将首先被击中。
From ScottGu:
I think you can register after the catch-all, but it won't ever be hit because the catch-all will be hit first.