我正在阅读MVC中的请求生命周期。我不理解下面这行。
UrlRoutingModule拦截请求
查询 - 什么是UrlRoutingModule?
我在谷歌搜索了很多但是找不到任何有用的
答案 0 :(得分:23)
对基于ASP.NET MVC的Web应用程序的请求首先通过UrlRoutingModule
对象,该对象是一个HTTP模块。该模块解析请求并执行路由选择。 UrlRoutingModule
对象选择与当前请求匹配的第一个路由对象。 (路由对象是实现RouteBase
的类,通常是Route
类的实例。)如果没有路由匹配,UrlRoutingModule
对象什么都不做,让请求回退到常规的ASP.NET或IIS请求处理。
从选定的Route对象中,UrlRoutingModule
对象获取一个实现IRouteHandler
接口且与Route
对象关联的对象。通常,在MVC应用程序中,这将是MvcRouteHandler
类的实例。 MvcRouteHandler
实例创建一个实现MvcHandler
接口的IHttpHandler
对象。然后MvcHandler
对象选择最终处理请求的控制器。有关更多信息,请参阅ASP.NET路由。
UrlRoutingModule
和MvcRouteHandler
类是ASP.NET MVC框架的入口点。他们执行以下操作:
在MVC Web应用程序中选择适当的控制器。
获取特定的控制器实例。
调用控制器的Execute
方法。
答案 1 :(得分:2)
如果查看MVC项目的Global.asax,您将看到一个名为RegisterRoutes
的方法。在此范围内,您将看到"默认" ASP.NET MVC路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
此路由指定URL请求的格式以及如何将其映射到控制器操作,即路由的第一部分标识控制器,第二部分标识操作等。您可以添加其他自定义< / em>路由到此,允许您使用不同格式的URL。
UrlRoutingModule
只是负责获取传入请求URL并将其与其中一条路由匹配的类,因此执行正确的控制器操作。
来自MSDN:
UrlRoutingModule类将HTTP请求与。中的路由进行匹配 ASP.NET应用程序。该模块遍历所有路由 RouteCollection属性并搜索具有URL的路由 与HTTP请求的格式匹配的模式。当模块 找到匹配的路由,它为此检索IRouteHandler对象 路线。从路由处理程序,模块获取IHttpHandler对象 并将其用作当前请求的HTTP处理程序。
答案 2 :(得分:0)
添加更多细节。
正如@Ant P所提到的,下面的代码用于注册路由
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
实际上MapRoute
是路由集合上的Extension method
,它在内部实现如下。
注意:根据我的理解,它只是一个伪代码。
var url = "{controller}/{action}/{id}";
var defaults = new RouteValueDictionary();
defaults.Add("controller", "Home");
defaults.Add("action", "Index");
defaults.Add("id", UrlParameter.Optional);
var routeHandler = new MvcRouteHandler();
var Default = new Route(url,defaults,routeHandler);
routes.Add(Default);
MvcRouteHandler的GetHttpHandler()
方法返回MvcHttpHandler
类的实例,该实例在内部处理进一步的请求。
希望这有助于理解UrlRoutingModule