0

有没有办法在 ASP.NET MVC v3 中进行回归路由处理?

这是我的商业案例示例:如果给定 URL “www.mysite.com/faq/Index”,我希望它检查控制器“FAQ”、操作“Index”是否存在路由

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { id = UrlParameter.Optional });

如果无法解决,通常会抛出 404 错误。相反,我希望它使用这条路线:

routes.MapRoute("Content", "Content/{*contentPath}", 
            new { controller = "Content", action = "RenderPageByURL" });

如果失败,那么它应该返回 404。

我在想我可以创建一个自定义错误处理程序,但这似乎很笨拙。关于从哪里开始的任何想法?或者这是一个真正的坏主意(TM),我应该回到企业并告诉他们使用正确的路径开始?谢谢。

编辑. 澄清一下,我不是想通过简单的 URL 匹配来查看它是否与路由匹配。我希望路由机制足够智能,可以知道路由是否成功并找到合适的控制器。

4

2 回答 2

1

在 Globasl.asax.cs下定义Content路由。Default

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { id = UrlParameter.Optional });

routes.MapRoute("Content", "Content/{*contentPath}", 
            new { controller = "Content", action = "RenderPageByURL" });
于 2012-11-16T16:53:41.303 回答
1

我根据同事的建议和以下链接回答我的问题(谢谢,乔希!):

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,并且仅当 Match 方法与我们现有的路由控制器之一不匹配时才返回 true。如果 Match 方法在 ContentRouteConstraint() 上失败,那么它会下降到下一个路由。

这样做的好处是我可以在尝试生成 URL 时忽略此路由(我们希望在本例中这样做)。

于 2012-11-23T15:15:02.373 回答