我试图深入了解ASP.Net MVC。具体来说,我正在尝试了解MVC运行时是如何启动的。在我的初步调查中,看起来它是由MvcRouteHandler启动的,然后构造了MvcHandler。但是,我似乎找不到MvcRouteHandler的注册位置。这个RouteHandler是如何添加到ASP.Net管道中的呢?
更新: 经过进一步检查,我已经将MvcRouteHandler的构造追溯到RouteCollectionExtensions类中,该类似乎包含RouteCollection类的扩展方法。包含构造函数的特定方法具有以下定义:
更新: 经过进一步检查,我已经将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事件中的代码进行配置的。
这正确吗?