Comprendre le processus d'exécution des applications MVC

Philippe Vialatte (Traduction)

Apprenez comment le Framework ASP.NET MVC traite une requête étape par étape.

- Titre : Comprendre le processus d'exécution des applications MVC

- Auteur : Philippe Vialatte (Traduction)

- Parution : 1 mai 2009

- Licence : Copyright ® 2009 Equipe dotnet. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Comprendre le processus d'exécution de l'application MVC

Traduction

Cet article est la traduction la plus fidèle possible de l'article original : Understanding the ASP.NET MVC Execution Process

Comprendre le processus d'exécution de l'application MVC

Les requêtes envoyées à une application Web basée sur ASP.NET MVC passent d'abord dans l'objet UrlRoutingModule, qui est un module HTTP. Ce module analyse la requête et effectue une sélection sur la route. L'objet UrlRoutingModule sélectionne la première route qui correspond à la demande actuelle. (Un objet route est une classe qui implémente RouteBase, et est généralement une instance de la classe Route). Si aucune route ne correspond, l'objet UrlRoutingModule ne fait rien et laisse la demande retourner au système de traitement standard des demandes d'ASP.NET ou d'IIS.

L'objet UrlRoutingModule obtient depuis l'objet Route l'objet IRouteHandler qui est associé à l'objet Route. Généralement, dans une application MVC, ce sera une instance de MvcRouteHandler. L'instance de IRouteHandler crée un objet IHttpHandler et le passe à l'objet IHttpContext. Par défaut, l'instance de IHttpHandler pour MVC est l'objet MvcHandler. L'objet MvcHandler sélectionne le contrôleur qui, à terme, traitera la demande.

Quand une application Web ASP.NET MVC s'exécute dans IIS 7.0, aucune extension de nom de fichier n'est requise pour les projets MVC. Toutefois, dans IIS 6.0, le gestionnaire exige que l'extension .mvc soit mappée à la DLL ASP.NET ISAPI.

L'UrlRoutingModule et l'IHttpHandler sont les points d'entrée du Framework ASP.NET MVC. Ils exécutent les actions suivantes :

- Sélectionner le contrôleur dans une application Web MVC.

- Obtenir une instance spécifique d'un contrôleur.

- Appeler la méthode Execute du contrôleur.

Le tableau suivant présente les étapes de l'exécution d'un projet Web MVC.

Étape

Détails

Réception de la première requête de l'application

Dans le fichier Global.asax, les objets Route sont ajoutés à l'objet RouteTable.

Effectuer le routage

Le module UrlRoutingModule utilise le premier objet Route correspondant à la requête dans la collection RouteTable pour créer un objet RouteData, qu'il utilise ensuite pour créer un objet RequestContext (IHttpContext) objet.

Créer un gestionnaire de requête (request handler) MVC

Le module MvcRouteHandler crée une instance de la classe MvcHandler, et lui transmet l'instance de RequestContext.

Créer un contrôleur

L'objet MvcHandler utilise l'instance de RequestContext pour identifier l'objet IControllerFactory (généralement une instance de la classe DefaultControllerFactory) pour créer une instance de contrôleur.

Exécuter un contrôleur

L'instance de MvcHandler appelle la méthode Execute du contrôleur.

Invoquer une Action

La plupart des contrôleurs héritent de la classe de base de Controller. Pour les contrôleurs pour lesquels c'est le cas, l'objet ControllerActionInvoker qui est associé au contrôleur détermine quelle méthode d'action de la classe du contrôleur appeler, puis appelle la méthode.

Exécuter une fonction résultat

Une action typique de la méthode peut recevoir des entrées de l'utilisateur, préparer les données appropriées pour le contenu de la réponse, puis exécuter le résultat, en renvoyant un type Result. Les types de base de résultat qui peuvent être exécutés sont les suivants : ViewResult (qui rend une vue et qui est le type résultat le plus souvent utilisé), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult et EmptyResult.