Home > Article > Backend Development > Detailed tutorial on ASP.NET MVC5 request processing pipeline and life cycle
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.
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
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); } }
The method is executed first. Generally, some configuration is added in this method, such asRoute
registration, global filter registration, etc.
. 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 RouteData
obtain IRouteHandler
eventually has IRouteHandler
and gets 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.
in ASP.NET MVC is the base class of all 在ASP.NET MVC5中有常用的过滤器有5个: ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。 最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。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
IAuthenticationFilter
、IAuthorizationFilter
、IActionFilter
、IResultFilter
、I<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>Filter
。
在ASP.NET MVC中所有的过滤器最终都会被封装为Filter
对象,该对象中FilterScope
类型的属性Scope
和int
类型属性<a href="http://www.php.cn/wiki/1360.html" target="_blank">Ord</a>er
用于决定过滤器执行的先后顺序,具体规则如下:
Order
和FilterScope
的数值越小,过滤器的执行优先级越高;Order
比FilterScope
具有更高的优先级,在Order
属性值相同时才会被考虑//数值越小,执行优先级越高public enum FilterScope
{
Action= 30,
Controller= 20,
First= 0,
Global= 10,
Last= 100}
ActionResult
Action
执行完毕之后会返回ActionResult
类型对象作为对此次请求进行处理的结果,对于不是ActionResult
类型的返回值,ASP.NET MVC会将其转换为ActionResult
类型。请求生命周期
课程推荐
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!