Pour bien comprendre les sujets abordés plus loin dans l'article, nous devons comprendre brièvement le processus de communication entre IIS et ASP.NET. Ce que j'explique ici, c'est le serveur IIS 6. Quant à IIS 5 et IIS 7, on peut dire que le premier a été éliminé, tandis que le « mode classique » du second est exactement le même que IIS 6, et le nouveau « mode pipeline » parle en fait de certains concepts d'ASP. NET et IIS. Je pense que si vous comprenez IIS 6 et ASP.NET, vous n'aurez aucun problème en mode intégré d'IIS 7.
Tout d'abord, examinons un diagramme schématique simple, montrant plusieurs étapes principales de l'ensemble du processus d'IIS, depuis la réception de la requête jusqu'au retour de la réponse :
Si vous souhaitez effectuer une réécriture d'URL dans une application ASP.NET, vous appelez généralement la méthode RewritePath de HttpContext dans l'événement BeginRequest pour repositionner la requête sur une URL cible. Par exemple, nous pouvons remplacer la méthode Application_BeginRequest dans Global.asax pour obtenir ceci :
La raison pour laquelle la réécriture est effectuée dans BeginRequest est que cet événement est le premier déclenché parmi tous les événements du Pipeline. Après le repositionnement à ce stade, certaines propriétés du HttpContext actuel ont également changé en conséquence (telles que HttpContext.Request.Path). De cette façon, la logique du gestionnaire des événements Pipeline suivants sera affectée. Par exemple, lorsque les autorisations doivent être déterminées en fonction d'un répertoire, le chemin « localisé » sera utilisé à la place de la requête reçue par ASP.NET. Naturellement, le changement le plus "significatif" est le choix du gestionnaire. Par exemple, dans l'exemple ci-dessus, nous déplaçons la requête vers le fichier "CustomerList.aspx", afin que le moteur ASP.NET sélectionne System.Web.UI. correspondant à *.aspx La classe PageHandlerFactory gère les requêtes.
classe publique Global : System.Web.HttpApplication .
{
protected void Application_BeginRequest (expéditeur de l'objet , EventArgs e)
{
Contexte HttpContext = HttpContext .Current ;
if (context.Request.Path.Equals( "/Clients" ,
StringComparison .InvariantCultureIgnoreCase))
{
context.RewritePath( "~/CustomerList.aspx" );
}
}
}
En guise de dernière remarque, deux concepts doivent être distingués, à savoir "ASP.NET Pipeline" et "Web Forms". Les deux sont des modèles importants dans ASP.NET, mais les différences restent très grandes :
En fait, le mot « forme » dans la phrase ci-dessus n’est peut-être pas exact. Parce que Web Forms devrait probablement être un moteur d'exécution et un modèle pouvant être utilisé indépendamment, et System.Web.UI.PageHandlerFactory utilise uniquement ce modèle. Lorsque nous écrivons des applications ASP.NET, nous pouvons utiliser ce modèle ailleurs en fonction de nos besoins. Par exemple, dans l'article « Technique : Utilisation du contrôle utilisateur pour la génération HTML », nous utilisons ascx comme modèle dans un gestionnaire générique pour générer du contenu.