有没有办法在ASP.NET MVC v3中进行回归路由处理?
这是我的商业案例:如果给出一个URL“www.mysite.com/faq/Index”,我希望检查控制器“FAQ”是否存在路由,操作“索引”< / p>
routes.MapRoute("Default","{controller}/{action}/{id}",
new { id = UrlParameter.Optional });
如果无法解决,通常会抛出404错误。相反,我希望它使用这条路线:
routes.MapRoute("Content", "Content/{*contentPath}",
new { controller = "Content", action = "RenderPageByURL" });
如果失败,那么它应该返回404。
我在想我可以创建一个自定义错误处理程序,但这似乎很糟糕。关于从哪里开始的任何想法?或者这是一个真正的坏主意(TM),我应该回到业务并告诉他们使用正确的路径开始?谢谢。
修改的。为了澄清,我不是要通过简单的URL匹配来查看它是否与路由匹配。我希望路由机制足够智能,以了解路由是否成功并找到合适的控制器。
答案 0 :(得分:1)
在Global.asax.cs中的Content
下面定义Default
路由。
routes.MapRoute("Default","{controller}/{action}/{id}",
new { id = UrlParameter.Optional });
routes.MapRoute("Content", "Content/{*contentPath}",
new { controller = "Content", action = "RenderPageByURL" });
答案 1 :(得分:1)
我根据同事的建议和以下链接回答我的问题(谢谢,Josh!):
http://stephenwalther.com/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx
基本上,我在路线上添加了自定义约束。
routes.MapRoute("Content", "{*contentPath}",
new { controller = "Content", action = "RenderPageByURL" },
new { matchController = new ContentRouteConstraint() });
routes.MapRoute("Default","{controller}/{action}/{id}",
new { id = UrlParameter.Optional });
ContentRouteConstraint()实现IRouteConstraint,并且仅当匹配方法与我们现有的路径控制器不匹配时才返回true。如果Match方法在ContentRouteConstraint()上失败,则它将下拉到下一个路径。
关于这一点的好处是我可以在尝试生成URL时忽略此路由(我们希望在此实例中执行此操作)。