Webforms 4 url路由多个匹配
我有一个webforms 4项目,我使用url路由Webforms 4 url路由多个匹配
在某些情况下,给定的路线可以匹配多个模式。
似乎路由机制以特定顺序尝试每个模式,并停止在第一个匹配。 (纠正我,如果我错了)。如果所选模式的资源(主要是一个aspx文件)不存在,我们有一个404错误(资源不存在)。
下一个匹配模式映射到现有资源,但该机制不会尝试。
实施例(使用类似于对MVC命名约定)
routes.MapPageRoute("Action", "{controler}/{action}/{*pathInfo}", "~/Views/{controler}/{action}.aspx");
routes.MapPageRoute("Overview", "{controler}/{*pathInfo}", "~/Views/{controler}/Overview.aspx");
因此,有一个/Views/Patient/Overview.aspx和/Views/Patient/Search.aspx的文件系统上。
路线“/患者”将匹配所述第二图案和映射到“/Views/Patient/Overview.aspx”
路线“/患者/搜索”将匹配第一图案映射到“/Views/Patient/Search.aspx”
路线“/人/搜索/ SomePathInfo”将匹配第一图案和映射到“/查看/人/海rch.aspx “(治疗” SomePathInfo”的URL的一部分的{*} panthinfo一部分)
现在,问题是,路线 “/患者/ SomePathInfo” 两个图案相匹配。第一个将“SomePathInfo”视为{action}部分(搜索不存在的“/Views/Patient/SomePathInfo.aspx”)。第二个将“SomePathInfo”视为{* pathInfo}部分,并映射到现有的“/Views/Patient/Overview.aspx”。
该机制虽然尝试第一个,但它找不到SomePathInfo.aspx文件,并引发404错误。
我的问题是“有没有办法来引导机制,以尝试每个模式,直到它找到一个现有的资源(或者,更一般的,直到某些条件得到满足?[点击这里:resource.exists] “!
一种解决方法,以上述我的问题是使用布线约束以及定义一组有限的可用值的{动作}占位符。这同样适用于{控制器}占位符等
所以我定义一个约束来仅接受列表中的动作:“索引”,“细节”,“添加”,“编辑”,“选择”等,以及控制器在“家”,“病人”,“事件”等列表中;
routes.MapPageRoute("Action", "{controler}/{action}/{*queryValues}", "~/Views/{controler}/{action}.aspx", true,
new RouteValueDictionary { // Default values
{ "controller", "home"},
{ "action", "index"} },
new RouteValueDictionary { // constraints
{ "controller", "home|patient|incident"},
{ "action", "index|details|add|delete|edit|select"} });
这样,当我输入类似“患者/ somequery”中,“somequery”字符串不满足这种映射的约束,所以该机制continoues到下一个和对待“somequery”部分作为{* queryvalues}而不是{action}。
但问题仍然成立:
“有没有办法来引导机制,以尝试每个模式,直到它找到一个现有的资源(或者,更一般的,直到某些条件得到满足[? here:resource.exists]“