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

Tutoriel détaillé sur le pipeline de traitement des requêtes ASP.NET MVC5 et son cycle de vie

PHPz
PHPzoriginal
2017-04-23 16:29:052837parcourir

Pipeline de traitement des requêtes

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 IHttpHandlerTraitement. à 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.

HttpApplication et HttpModule

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.

Route

Une requête HTTP sera traitée par au moins un

. 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 UrlRoutingModuleautres 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

HttpHandler

Une requête HTTP finira par entrer dans le HttpHanler pour traitement. Une requête HTTP ne peut être traitée que par un seul HttpHandler.

Contrôleur

traite la requête actuelle dans la méthode IHttpHandler, et dans cette méthode passe ProcessRequest pour obtenirControllerBuilderEnsuite, obtenez le type de IControllerFactory par réflexion. Controller

Action

Dans ASP.NET MVC,

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.

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视频教程

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn