在我的路由中,我希望找到类似未找到路由处理程序的东西。
例如,我创建了一个像
这样的映射routes.MapRoute(
"default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id="" }
);
routes.MapRoute(
"Catchall",
"{*catchall}",
new { controller = "Home", action = "Lost" }
);
但是当用户插入像/ one / two / three / four / bla / bla这样的地址时,它将被Catchall映射缓存。
但是当用户插入与默认映射匹配的内容时, (比如/ one / two /,但是这个控制器或动作没有实现) 我希望Catchall映射能够接受这个请求, 因为所有其他映射都失败了。但不是这样,我得到一个错误。
如果控制器或操作获得异常,我是否应该覆盖一些映射处理程序以捕获异常?
答案 0 :(得分:0)
这里的问题是,路线有责任确保“一个/两个”映射到文件。这个责任属于ViewEngine。由于“一/二”是有效的路线,因此将选择它。
如果你想处理无效路由的错误,我建议你做的只是使用内置的ErrorHandling“页面”来显示你在Catchall中所做的任何消息。
答案 1 :(得分:0)
我认为这不是最佳解决方案,但您可以在路线上更加具体:
routes.MapRoute(
"home and action",
"home/index/{id}",
new { controller = "Home", action = "Index", id="" }
);
...重复其余的行动......
routes.MapRoute(
"article catch all",
"home/{article}",
new { controller = "Home", action = "ArticleSearcher", article="" }
);
这将尝试匹配直接操作,如果未找到任何操作,则将默认路由的{action}部分通常作为文章字符串参数传递给“ArticleSearcher”操作。
缺点是必须明确创建每个控制器/操作路径。