写一个捕获所有mvc路线

时间:2013-01-22 00:38:33

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我正在使用MVC4并希望写一条路线,但不确定如何做到这一点。

在我的网站上,我有很多路线。我想要实现的目标如下:

  • 任何与路由对应的网址,该路由的控制器操作都会被触发
  • 但如果没有找到url的控制器操作,我想要触发特定的控制器操作,例如。 www.mywebsite.com/level1/level2/level3没有相应的路由,所以我想调用一个特定的路由并将其作为控制器动作的参数传递给字符串列表中的level1,level2和level3。物品数量没有限制。

根据这些信息,我将检查数据是否存在于内容管理系统等中。

我是如何为上述方法创建路线的?

2 个答案:

答案 0 :(得分:1)

你的建议基本上是一个捕获404.它可能听起来不是很优雅,因为它感觉就像导致错误并捕获它,但404只是在无法识别正确路线后采取的步骤。如果MVC框架具有“最终选项”路线,则在没有找到正确的路线之后进行。

2个方法

路线方法

  • //我们找不到处理请求的路由。显示404页面。 routes.MapRoute(“Error”,“{* url}”,     new {controller =“Error”,action =“404”} );

-

-

web.config中的自定义错误处理程序

<customErrors mode="On" >
       <error statusCode="404" redirect="~/CatchallController/CatchallAction" />
</customErrors>   

无路由匹配引发的条件是404.这样您就可以将所有不匹配指向您的~/CatchallController/CatchallAction

|

答案 1 :(得分:0)

您可以在路线模式中使用星号来表示“全能”(“可变长度”路线)。

e.g。 “{控制器} / {行动} / {ID} / {*}包罗万象”

这将匹配任何包含来自catchall段的任意数量的段的URL。

请记住在更一般的路线之前指定更具体的路线。