题
在我的路由我想有这样的事情没有找到路由处理。
例如我已经创建一个映射等
routes.MapRoute(
"default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id="" }
);
routes.MapRoute(
"Catchall",
"{*catchall}",
new { controller = "Home", action = "Lost" }
);
但是,当用户插入解决类似/一/二/三/四/ BLA / BLA它将与全部接收映射被高速缓存。
但是,当用户插入的东西,应与默认映射, (像/一/二/,但这种控制器或操作未实现) 我想那全部接收映射会接受这一要求, 因为所有其他映射失败。但不是这个,我得到一个错误。
我应该覆盖一些映射处理程序来捕捉异常如果控制器或动作得到一个例外?
解决方案
这里的问题是,它不是路由的责任,以确保“一/二”映射到的文件的。这一责任落在了视图引擎。由于 “一/二” 是一个有效的路线,将被选择。
如果你想处理一个无效路线的错误,我会建议你做的仅仅是使用内置ErrorHandling中的“页面”,以显示你将在全部接收所做的任何消息。
其他提示
我不认为这是最好的解决办法,但你总是在你的路线更具体的:
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="" }
);
此将尝试匹配具有直接作用,并且如果没有动作被发现,通过什么通常将是缺省路由的{动作}一部分作为物品字符串参数“ArticleSearcher”动作。
的缺点是具有显式地创建每个控制器/动作的路线。
不隶属于 StackOverflow