asp.net - MvcRouteHandler在哪里注册的

标签 asp.net iis-7 asp.net-mvc-4

我试图在较低的层次上理解 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)

从这里开始,这只是路由匹配的问题,然后导致使用 M​​vcRouteHandler 来调用 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

中找到它

enter image description here

关于asp.net - MvcRouteHandler在哪里注册的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058878/

相关文章:

css - 图像显示在 Visual Studio Development Server 但不是 IIS7

asp.net - 在 IIS7 中调试已运行的 ASP.NET 站点

javascript - jQuery 验证和图像文件

c# - 返回部分 View 并将其附加到 index.cshtml View Mvc4 中的 div

c# - 如何在C#中复制列表

c# - 解析并乘以 1000 以获得 ms 而不是秒的问题

c# - 如何使 Asp.Net 服务器端路由与无哈希 url 一起工作?例如用于 Backbone/AngularJS

c# - 可以用jquery设置di​​v内容

c# - 如何使用 Microsoft.Web.Administration 命名空间在 IIS7 中干净地操作处理程序映射?

c# - 如何添加用户 ID 以在 mvc4 中验证 cookie