Home  >  Article  >  Backend Development  >  Detailed tutorial on ASP.NET MVC5 request processing pipeline and life cycle

Detailed tutorial on ASP.NET MVC5 request processing pipeline and life cycle

PHPz
PHPzOriginal
2017-04-23 16:29:052848browse

Request processing pipeline

The request pipeline is a combination of modules used to process HTTP requests. In ASP.NET, the request pipeline has two core components : IHttpModule and IHttpHandler. All HTTP requests will enter IHttpHandler, IHttpHandler will perform final processing, and IHttpModule can be done by subscribing to events in the HttpApplication object. Preprocess the request before IHttpHandler processes the HTTP request or process IHttpHandler again after processing the HTTP request.

Before IIS7, such as IIS6 or IIS5, the request processing pipeline was divided into two: IIS request processing pipeline and ASP.NET pipeline. If the client requests static resources, only the IIS pipeline will be processed, and ASP.NET The request will not be processed by the pipeline. Starting from IIS7, the two pipelines are combined into one, called the integrated pipeline.


The above figure mainly describes the processing of HTTP requests by the ASP.NET runtime without going into too many details.

HttpApplication and HttpModule

##After the HTTP request is taken over by the ASP.NET runtime,

HttpRuntime<a href="http://www.php.cn/wiki/1268.html" target="_blank"></a> will use HttpApplicationFactory to create or take out a ## from the HttpApplication object pool (similar mechanisms in .NET include thread pools and string detention pools) #HttpApplication object. At the same time, ASP.NET will initialize the registered HttpModule according to the configuration file. HttpModule will subscribe to events in HttpApplication during initialization. Implement processing of HTTP requests. In ASP.NET

MVC

5, the MvcApplication class is defined in the Global.asax file, inherited from HttpApplication Class:

public class MvcApplication : System.Web.HttpApplication
{    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteTable.Routes.Add("xfhHandler", new Route(           "{controller}/{action}",            new RouteValueDictionary(new Dictionary<string, object>() { ["controller"] = "home", ["action"] = "index" }),            new XfhUrlRouteHandler())
        );        //RouteConfig.RegisterRoutes(RouteTable.Routes);    }
}

Application_Start()

The method is executed first. Generally, some configuration is added in this method, such asRoute registration, global filter registration, etc.

RouteAn HTTP request will be processed by at least one

HttpModule

. UrlRoutingModule is a very important module, which is the core of the routing system. The responsibility of the routing system is to obtain the names of the controller and action and other request data from the request URL. UrlRoutingModule
Matches the current requested URL with the routing template registered in RouteTable and returns the first route object that matches the current requestRoute, and then obtain the routing data object RouteData (in ASP.NET MVC, the routing data must contain the names of controller and action) according to the route object, and then RouteDataobtain IRouteHandler eventually has IRouteHandler and gets IHttpHandler.

HttpHandlerAn HTTP request will eventually enter the HttpHanler for processing. An HTTP request can only be processed by one HttpHandler.

Controller

IHttpHandler

The current request is processed in the ProcessRequest method. In the method, IControllerFactory is obtained through ControllerBuilder and then the type of Controller is obtained through reflection.

Action

ControllerBase

in ASP.NET MVC is the base class of all Controller, In the Execute method of the type, the call to Action is executed through the InvokeAction method of IActionInvoker. Model binding and model authentication operations will be performed before Action is executed.

Filters

在ASP.NET MVC5中有常用的过滤器有5个:IAuthenticationFilterIAuthorizationFilterIActionFilterIResultFilterI<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>Filter
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter对象,该对象中FilterScope类型的
属性Scopeint类型属性<a href="http://www.php.cn/wiki/1360.html" target="_blank">Ord</a>er用于决定过滤器执行的先后顺序,具体规则如下:

  • OrderFilterScope的数值越小,过滤器的执行优先级越高;

  • OrderFilterScope具有更高的优先级,在Order属性值相同时才会被考虑


//数值越小,执行优先级越高public enum FilterScope
{
    Action= 30,
    Controller= 20,
    First= 0,
    Global= 10,
    Last= 100}

ActionResult

Action执行完毕之后会返回ActionResult类型对象作为对此次请求进行处理的结果,对于不是ActionResult类型的返回值,ASP.NET MVC会将其转换为ActionResult类型。

请求生命周期

ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。

最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。


 

课程推荐

php中文网在线Java视频教程

The above is the detailed content of Detailed tutorial on ASP.NET MVC5 request processing pipeline and life cycle. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn