Pur*_*ome 7 asp.net-mvc routes
我有以下路线定义:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
// Added custom route here!
routes.MapRoute(
"CatchAll",
"{*catchall},"
new { controller = "Error", action = "NotFound" }
);
}
Run Code Online (Sandbox Code Playgroud)
没有什么新东西 - 这是默认的ASP.NET MVC1 RegisterRoutes
方法,添加了一个自定义路由.
现在,如果我转到以下网址,我会收到404 ...
http://whatever/Home/MissingActionMethod
Run Code Online (Sandbox Code Playgroud)
所以没有ActionMethod
所谓MissingActionMethod
的HomeController
.所以,这是否意味着,如果我转到上面定义的第一条路线,并且未能找到行动......那么我是否会回来尝试第二条路线?冲洗,重复?
或者一旦我匹配路线,我然后尝试执行该路线..如果我失败(即,发现行动失踪)..那么......运气不好?boomski?
干杯!
感谢大家回复,但他们没有正确地阅读我的问题:(我知道1)路线的顺序很重要b)haack的路线调试器
但我的问题与此无关.我问的是..如果第一条路线是'处理'但是失败了......那么它会从列表中下载到下一条路线吗?
所以,在我上面的例子中.第一个名为'Default'的路由与请求的url/resource匹配...但是当框架试图找到一个缺少的动作时......它是404的.
那么..这是否意味着框架首先匹配"默认"路线..尝试它..失败..返回到路线列表..试图找到匹配的下一条路线..最后失败所以它然后放弃?
或者它只找到它匹配的第一个也是唯一的第一个路线..如果它找不到控制器和/或动作......那么它只是放弃那里然后呢?(这是我怀疑的).如果是这样的话......然后如何弄清楚如何404?
Phil Haack实际上谈论了我的问题,但有点......但是没有回答我对此感到好奇的部分 - >它如何以及在何处确定未找到404资源.
路线!=行动。
它是这样的 - 根据传入的请求,路由模块在路由表中搜索匹配的第一个路由,然后尝试调用适当的操作。
如果未找到操作,请求将失败并返回 404(它不会尝试寻找下一个路由)。
但为了实现这一目标,应该可以扩展框架。我的第一个猜测 - 你可以写你自己的RouteHandler
。
- RouteHandler
并非真正特定于 ASP.NET MVC,RouteHandler 是决定选择路由后要执行的操作的组件。显然,如果您更改 RouteHandler,您最终会在没有 ASP.NET MVC 的情况下处理请求,但是如果您想直接使用某些特定的 HttpHanlder 甚至使用经典的 WebForm 来处理路由,这可能会很有用。
无论如何 - 但我不会推荐它。最好保持路由愚蠢。
经过一番快速谷歌搜索后——我对此不再那么乐观了。:)
归档时间: |
|
查看次数: |
2585 次 |
最近记录: |