MvcRouteHandler在哪里注册

Mat*_*uwe 4 asp.net iis-7 asp.net-mvc-4

我试图在较低的层次上理解ASP.Net MVC.具体来说,我试图了解MVC运行时是如何开始的.对于我最初深入研究调用堆栈/反编译,它似乎由MvcRouteHandler启动,然后MvcRouteHandler构造MvcHandler.但是,我似乎无法找到MvcRouteHandler的注册位置.这个RouteHandler如何被添加到ASP.Net管道?

更新
在进一步检查后,我已将MvcRouteHandler构造跟踪到RouteCollectionExtensions类中,该类看起来包含RouteCollection类的扩展.包含构造函数的特定方法具有以下定义:

public static Route MapRoute(this RouteCollection routes, 
                             string name, 
                             string url, 
                             object defaults, 
                             object constraints, 
                             string[] namespaces)
Run Code Online (Sandbox Code Playgroud)

我相信密钥可以在这行代码中找到:

Route route = new Route(url, new MvcRouteHandler());
Run Code Online (Sandbox Code Playgroud)

所以,对我而言,这是MvcRouteHandler被分配的地方.整个事件链如下所示:

一切都始于Global.asax.cs

Application_Start()
RouteConfig.RegisterRoutes
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults)
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints)
RouteCollectionExtensions.MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)
Run Code Online (Sandbox Code Playgroud)

从这里开始,它只是路由匹配的问题,然后使用MvcRouteHandler来调用MvcHandler并启动整个事件链.所以我最初假设MvcRouteHandler在某个配置中注册是错误的.相反,它是通过从global.asax.cs文件中的Application_Start事件开始的代码配置的.

它是否正确?

Edu*_*eni 5

请求通过ASP.net管道,然后被UrlRoutingModuleHTTP模块捕获.

更多信息:ASP.NET MVC如何工作?

编辑:路由模块安装在您的站点web.config继承的计算机web.config中.你可以找到它%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config

在此输入图像描述