MvcRouteHandler在哪里注册?

4
我试图深入了解ASP.Net MVC。具体来说,我正在尝试了解MVC运行时是如何启动的。在我的初步调查中,看起来它是由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)

我相信关键在于这行代码:

Route route = new Route(url, new MvcRouteHandler());

因此,对我而言,这就是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)

从这里开始,只是路由匹配的问题,这会导致使用MvcRouteHandler,它调用MvcHandler并启动整个事件链。因此,我最初的假设是MvcRouteHandler在某个配置文件中注册了,这是错误的。相反,它是通过global.asax.cs文件中的Application_Start事件中的代码进行配置的。

这正确吗?

1个回答

5
请求通过ASP.net管道传递,然后被UrlRoutingModule HTTP模块捕获。
更多信息:ASP.NET MVC是如何工作的? 编辑:路由模块安装在您的机器web.config中,您的站点web.config继承它。您可以在%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config找到它。 enter image description here

完全阅读了这篇文章后,我不能说我更清楚 MvcRouteHandler 在哪里注册了。它说路由处理程序在 web.config 中注册,但是在我的 web.config 中没有这样的条目,但 MVC 仍然可以工作。这篇文章有很多很棒的信息,但最终并没有回答问题。我认为可能是在 MVC 4 中他们改变了一些东西。 - Matt Ruwe
谢谢。我应该想到这个。 - Matt Ruwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接