Я пытаюсь лучше понять "сантехника за ASP.NET и ASP.NET MVC. Я читал эту страницу, что очень помогло. Насколько я понимаю, на каждом сайте ASP.NET есть класс, который наследуется от System.Web.HttpApplication. Затем HttpApplication имеет ряд событий, которые вызывают HttpModules и HttpHandlers, такие как BeginRequest, AuthorizeRequest, End Request и т.д. Затем HttpModules и HttpHandlers читают и записывают в текущий HttpContext и из него.
Как ASP.NET знает, какой класс HttpApplication использовать? Мое приложение имеет типичный класс MvcApplication в файле Global.asax. Но я ничего не вижу в этом классе, связанном с 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
.