ASP.NET MVC - 什么是UrlRoutingModule?

时间:2013-05-20 05:15:31

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我正在阅读MVC中的请求生命周期。我不理解下面这行。

  

UrlRoutingModule拦截请求

查询 - 什么是UrlRoutingModule?

我在谷歌搜索了很多但是找不到任何有用的

3 个答案:

答案 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路由。

UrlRoutingModuleMvcRouteHandler类是ASP.NET MVC框架的入口点。他们执行以下操作:

  • 在MVC Web应用程序中选择适当的控制器。

  • 获取特定的控制器实例。

  • 调用控制器的Execute方法。

Reference

答案 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

的作用