【问题标题】:writing a catch all mvc route编写一条捕获所有 mvc 路由
【发布时间】:2013-01-22 00:38:33
【问题描述】:
我正在使用 MVC4 并希望编写一条路线,但不确定如何去做。
在我的网站上,我有许多路线。我想要达到的目标如下:
- 任何与路由对应的 url,都会触发该路由的控制器操作
- 但是,如果没有为 url 找到控制器操作,我希望触发特定的控制器操作,例如。 www.mywebsite.com/level1/level2/level3 没有对应的路由,所以我想调用一个特定的路由并将字符串列表中的 level1、level2 和 level3 作为控制器操作的参数传递给它。项目数量没有限制。
有了这些信息,我将检查数据是否存在于内容管理系统等中。
任何想法我可以如何为上述创建路线?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-4
asp.net-mvc-routing
【解决方案1】:
您的建议基本上是 404 捕获。它可能听起来并不优雅,因为它感觉像是导致错误并捕获它,但 404 只是在无法识别正确路线后采取的步骤。如果 MVC 框架有一个“Final Option”路由,它将在没有找到合适的路由后被采用。
2 种方法
路由方法
-
或
-
web.config 中的自定义错误处理程序
<customErrors mode="On" >
<error statusCode="404" redirect="~/CatchallController/CatchallAction" />
</customErrors>
没有路由匹配引发的条件是 404。这样你就可以将所有不匹配的东西都指向你的~/CatchallController/CatchallAction
|
【解决方案2】:
您可以在路线模式中使用星号来表示“包罗万象”(“可变长度”路线)。
例如“{controller}/{action}/{id}/{*catchall}”
这将匹配任何 url 与从 catchall 段开始的任意数量的段。
记得在更一般的路线之前指定更具体的路线。