Maison > Article > développement back-end > Tutoriel détaillé sur le pipeline de traitement des requêtes ASP.NET MVC5 et son cycle de vie
Le pipeline de requêtes est une combinaison de modules utilisés pour traiter les requêtes HTTP Dans ASP.NET, le pipeline de requêtes comporte deux composants principaux. : IHttpModule
et IHttpHandler
. Toutes les requêtes HTTP entreront dans IHttpHandler
et IHttpHandler
effectuera le traitement final. En vous abonnant aux événements dans l'objet IHttpModule
, HttpApplication
pourra prétraiter ou prétraiter la requête HTTP avant que IHttpHandler
la traite IHttpHandler
Traitement. à nouveau la requête HTTP après l'avoir traitée.
Avant IIS7, comme IIS6 ou IIS5, le pipeline de traitement des requêtes était divisé en deux : le pipeline de traitement des requêtes IIS et le pipeline ASP.NET. Si le client demande des ressources statiques, seul le pipeline IIS sera traité, et. ASP.NET La requête ne sera pas traitée par le pipeline. À partir d’IIS7, les deux pipelines sont combinés en un seul, appelé pipeline intégré.
La figure ci-dessus décrit principalement le traitement des requêtes HTTP par le runtime ASP.NET sans entrer trop dans les détails.
Une fois la requête HTTP prise en charge par le runtime ASP.NET, HttpRun<a href="http://www.php.cn/wiki/1268.html" target="_blank">time</a>
sera créé à l'aide de HttpApplicationFactory
ou de HttpApplication
Retirez un objet du pool d'objets (les mécanismes similaires dans .NET incluent le pool de threads et le pool de détention String HttpApplication
), et ASP.NET l'initialisera en fonction du fichier de configuration Les HttpModule
et HttpModule
enregistrés s'abonneront aux événements dans HttpApplication lors de l'initialisation pour traiter les requêtes HTTP.
Dans ASP.NET MVC5, la classe Global.asax
est définie dans le fichier MvcApplication
, et hérite de la classe HttpApplication
:
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); } }
est exécutée en premier. Généralement, certaines configurations sont ajoutées dans cette méthode, telles que l'enregistrement Application_Start()
routage, le filtre global. Inscription etc.
. HttpModule
est un module très important, c'est le cœur du système de routage. La responsabilité du système de routage est d'obtenir les noms du contrôleur et des actions ainsi que les UrlRoutingModule
autres données de requête à partir de l'URL de la requête.
correspond à l'URL demandée actuelle et au modèle de routage enregistré dans UrlRoutingModule
et renvoie le premier objet de route RouteTable
qui correspond à la demande actuelle, puis obtient l'objet de données de routage basé sur l'objet de route Route
(Dans ASP.NET MVC, les données de routage doivent contenir les noms du contrôleur et de l'action), puis RouteData
pour obtenir RouteData
et enfin IRouteHandler
pour obtenir IRouteHandler
. IHttpHandler
traite la requête actuelle dans la méthode IHttpHandler
, et dans cette méthode passe ProcessRequest
pour obtenirControllerBuilder
Ensuite, obtenez le type de IControllerFactory
par réflexion. Controller
est la classe de base de tous les ControllerBase
, dans la méthode Controller
du type L'appel à Execute
est exécuté via la méthode IActionInvoker
de InvokeAction
. Avant l'Action
exécution, les opérations de liaison Action
modèle et d'authentification du modèle seront effectuées.
在ASP.NET MVC5中有常用的过滤器有5个: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}
Action
执行完毕之后会返回ActionResult
类型对象作为对此次请求进行处理的结果,对于不是ActionResult
类型的返回值,ASP.NET MVC会将其转换为ActionResult
类型。
ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点,请求到达服务器后进入处理管道,至浏览器接收服务器响应时为止。
最后附上一张老外绘制的ASP.NET请求管道图,图片来自《ASP.NET MVC Interview Questions and Answers Book》这本书。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!