我正在阅读有关MVC中请求生命周期的内容。我在理解下面这句话时遇到了困难。
UrlRoutingModule拦截请求
问题 - 什么是UrlRoutingModule?
我在Google上搜索了很多,但没有找到任何有用的信息。
我正在阅读有关MVC中请求生命周期的内容。我在理解下面这句话时遇到了困难。
UrlRoutingModule拦截请求
问题 - 什么是UrlRoutingModule?
我在Google上搜索了很多,但没有找到任何有用的信息。
ASP.NET MVC(Model-View-Controller)的Web应用程序会首先经过HTTP模块 UrlRoutingModule
对象进行请求。该模块解析请求并执行路由选择。 UrlRoutingModule
选择与当前请求匹配的第一个路由对象。(路由对象是实现了RouteBase
接口的类,通常是Route
类的实例。)如果没有任何路由匹配,则 UrlRoutingModule
不执行任何操作,并将请求回退到常规ASP.NET或IIS请求处理。
从所选的路由对象中,UrlRoutingModule
获取了一个实现了IRouteHandler
接口的对象,并且与Route
对象相关联。在MVC应用程序中,这通常是MvcRouteHandler
类的一个实例。 MvcRouteHandler
实例创建一个实现了IHttpHandler
接口的MvcHandler
对象。然后,MvcHandler
对象选择最终处理请求的控制器。有关详细信息,请参阅ASP.NET路由。
UrlRoutingModule
和 MvcRouteHandler
类是ASP.NET MVC框架的入口点。它们执行以下操作:
在MVC Web应用程序中选择适当的控制器。
获取特定的控制器实例。
调用控制器的Execute
方法。
RegisterRoutes
的方法。在其中,您将会看到“默认”的ASP.NET MVC路由:routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
UrlRoutingModule
只是负责接收传入请求的URL,并将其与这些路由之一进行匹配,以便执行正确的控制器操作的类。UrlRoutingModule类将HTTP请求与ASP.NET应用程序中的路由相匹配。该模块遍历RouteCollection属性中的所有路由,并搜索具有与HTTP请求格式匹配的URL模式的路由。当模块找到匹配的路由时,它会检索该路由的IRouteHandler对象。从路由处理程序中,模块获取一个IHttpHandler对象,并将其用作当前请求的HTTP处理程序。
再补充一些细节。
如@Ant P所述,以下代码用于注册路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
实际上,MapRoute
是路由集合上的扩展方法
,它在内部实现如下。
注意:这只是我理解的伪代码。
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);