2016-12-09 7 views
1

Я пытаюсь понять и изучить архитектуру и конвейер ASP.NET. До сих пор я понимаю обзор архитектуры:ASP.NET обнаружения HttpHandler MVC против WebForms

  • о том, как мы получаем от клиента к веб-серверу IIS (запрос)
  • с помощью расширения ISAPI для выполнения ASP.NET
  • оттуда в HTTP Pipeline
  • и ASP.NET вызова HttpModules и HttpHandler
  • в случае использования MVC, выбирая MvcHandler
  • , который возвращается в MvcRouteHandler
  • и т.д. и т.п.

Теперь то, что я не понимаю (или не может найти какой-либо ресурс в Интернете задокументировать эту часть), как делает asp.net выполнения определить, какие HttpHandler он должен выбрать для его запрос? Итак, как это известно на основе моего решения Visual Studio, например, это приложение MVC? Как это понять, что он должен использовать MvcHttpHandlers? Есть ли сборка с отражением где-нибудь в конвейере HTTP? Потому что это, конечно, не конфигурация, указывающая на время выполнения MvcHandler, или это так?
Итак, в основном, в какой точке находится HttpContext.CurrentHandler?

ответ

1

Application_Start

Когда запрос поступает в IIS и конечная точка соответствует Asp.Net приложения , то первое событие, которое возникает это Application_Start в System.Web.HttpApplication объект.


RouteTable.Routes.Add

В этом случае приложение Mvc вы можете установить правила маршрутизации, которые делают матч оконечных URLs с Контроллеры и Действия методы в применении и относительной IRouteHandler типа объекта, , который будет typeof(MvcRouteHandler).
(см Scott Guthrie post)


HttpApplication.MapRequestHandler

Таким образом, вскоре после этого, когда таблица маршрутизации была выставиться, в subsequents событий (или лучше в методах, которые составляют трубопровод оркестрованы Asp.Net Framework под управлением IIS (интегрированный трубопровод)) от управления запроса HTTP Asp.Net, , когда он должен знать, как управлять запрос HTTP сам (HttpApplication.MapRequestHandler), то получить разобрали URL в HttpContext объект против правил в таблице маршрутизации, и когда получить нашел совпадение, то instatiated правильного типа обработчика, MvcRouteHandler в нашем случае, который будет возвращать объект IHttpHandler самыми метод GetHttpHandler(RequestContext)MvcHandler.
(см Msdn MvcRoutHandler.GetHttpHandler)


MvcHandler.ProcessRequest

MvcHandler, в свою очередь, даст начало реальной MVC обработки запроса через Asp .Net-событие конвейера ProcessRequest: и так будет быть instatiated справа Controller через ControllerFactory, и будет называться методом Controller абстрактного базового класса instatiated объекта контроллера Execute, и, наконец, право Действие через ActionInvoker.
(см Msdn MvcHandler.ProcessRequest и The Asp.Net Mvc pipeline)


Конечная нота на RouteCollection.MapRoute
Шаблон Visual Studio Стартер для проектов MVC создает проект, который используют MapRoute метод расширения вместо o f RouteTable.Routes.Add.Этот метод очень полезен , потому что избегает необходимости всегда typeof(MvcRouteHandler) выражение при добавлении новой маршрутизации URL-адреса в проект.
(см Asp.Net Routing and Asp.Net Mvc)

Смежные вопросы