我试图在较低的层次上理解 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)
我相信关键是在这行代码中找到的:
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 事件中开始的代码进行配置的。
这是正确的吗?
最佳答案
请求通过 ASP.net 管道,然后被 UrlRoutingModule
HTTP 模块捕获。
更多信息:How does ASP.NET MVC work?
编辑:路由模块安装在您的计算机 web.config 中,您的站点 web.config 继承该模块。您可以在 %systemroot%\Microsoft.NET\Framework\$versionNumber$\CONFIG\Web.config
关于asp.net - MvcRouteHandler在哪里注册的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058878/