我正试图从一个较低的层次来理解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在某个配置中注册是错误的。相反,它是通过从Application_Start事件开始的global.asax.cs文件中的代码来配置的。
这是正确的吗?
发布于 2012-10-24 22:54:26
请求通过ASP.net管道,然后被UrlRoutingModule HTTP模块捕获。
更多信息:ASP.NET MVC是如何工作的?
编辑:路由模块安装在您的计算机web.config中,您的站点web.config继承了它。你可以在%systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config找到它

https://stackoverflow.com/questions/13058878
复制相似问题