ASP.NET如何知道使用什么HttpApplication类?我的应用程序在Global.asax文件中具有典型的MvcApplication类.但是我在这个类中没有看到有关MVC的内容.在任何将此类分配为“应用程序”的地方,我也看不到任何设置. ASP.NET只是总是寻找一个名为Global.asax的文件来弄清楚要创建的HttpApplication类?或者ASP.NET只是在我的程序集中寻找继承自HttpApplication的任何类?
另外,它如何知道要使用的模块和处理程序?我上面提到的页面指出了web.config中的处理程序和模块以及设置.但是我的ASP.NET MVC应用程序在其web.config中没有这些设置?
如果我在我的一个动作方法中设置了一个断点,并检查HttpContext.Current.ApplicationInstance.Modules,我看到以下内容:
OutputCache Session WindowsAuthentication FormsAuthentication PassportAuthentication RoleManager UrlAuthorization FileAuthorization AnonymousIdentification Profile ErrorHandlerModule ServiceModel UrlRoutingModule-4.0 ScriptModule-4.0 __DynamicModule_System.Web.WebPages.WebPageHttpModuleDefaultAuthentication
这些指定在哪里?同样,如果我检查HttpContext.Current.Handler我可以看到它设置为System.Web.Mvc.MvcHandler.
解决方法
1)它加载由应用程序承载的所有web.config所指定的所有Http模块.
2)如果系统启用了ASP.NET MVC,则global web.config会将UrlRoutingModule
注册到请求流程中.
现在,您在global.asax(如标准MvcApplication)中从HttpApplication派生的类被编译到dll中.铭记这一点…
5)ASP.NET运行时扫描YourApplication.dll以获取源自HttpApplication的类,并执行其许多方法(例如Application_Start).
6)当使用惯用的ASP.NET MVC MapRoute扩展方法创建路由时,它将该路由与MvcRouteHandler
相关联.
7)UrlRoutingModule(从步骤2)使用routing handler来选择ASP.NET将用于处理该路由上的传入请求的http处理程序.
你可以找到the full story here.