我试图在较低级别理解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事件开始的代码配置的。
这是对的吗?
答案 0 :(得分:5)
请求通过ASP.net管道,然后被UrlRoutingModule
HTTP模块捕获。
更多信息:How does ASP.NET MVC work?
编辑:路由模块安装在您的网站web.config继承的计算机web.config中。您可以在%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config