48 votes

Réécriture d'URL et routage d'URL dans IIS

Je prévoyais d'utiliser le routage d'url pour une application Web Forms. Mais, après avoir lu quelques postes Je ne suis pas sûr qu'il s'agisse d'une approche facile.

Est-il préférable d'utiliser le Module de réécriture d'URL pour les formulaires web ? Mais, c'est seulement pour IIS7. Initialement, il y avait un certain buzz que le routage URL est totalement découplé de Asp.Net MVC et qu'il pourrait être utilisé pour les formulaires web.

J'aimerais entendre toutes les suggestions

40voto

splattne Points 48126

C'est le meilleur article que j'ai trouvé sur ce sujet : Réécriture d'URL IIS et routage ASP.NET par Ruslan Yakushev.

Réécriture d'URL IIS

Lorsqu'un client demande au serveur Web une URL particulière, le composant de réécriture d'URL analyse l'URL demandée et la remplace par une autre URL différente sur le même serveur. Le composant de réécriture d'URL s'exécute très tôt dans le pipeline de traitement des demandes. Il est donc en mesure de modifier l'URL demandée avant que le serveur Web ne prenne une décision quant au gestionnaire à utiliser pour traiter la demande.

IIS URL Rewriting

Routage ASP.NET

Le routage ASP.NET est mis en œuvre sous la forme d'un module de code géré qui se branche sur le pipeline de traitement des demandes IIS au niveau de l'étape Resolve Cache (événement PostResolveRequestCache) et de l'étape Map Handler (PostMapRequestHandler). Le routage ASP.NET est configuré pour s'exécuter pour toutes les demandes adressées à l'application Web.

IIS URL Routing

Différences entre la réécriture d'URL et le routage ASP.NET :

  1. La réécriture d'URL est utilisée pour manipuler les chemins d'accès aux URL. avant que la demande ne soit traitée par le serveur Web . Le module de réécriture d'URL ne sait rien du gestionnaire qui traitera finalement l'URL réécrite. De plus, le gestionnaire de requêtes actuel peut ne pas savoir que l'URL a été réécrite.
  2. Le routage ASP.NET est utilisé pour envoyer une demande à un gestionnaire en fonction du chemin URL demandé . Contrairement à la réécriture d'URL, le composant de routage connaît les gestionnaires et sélectionne le gestionnaire qui doit générer une réponse pour l'URL demandée. Vous pouvez considérer le routage ASP.NET comme un mécanisme avancé de mappage de gestionnaires.

Outre ces différences conceptuelles, il existe quelques différences fonctionnelles entre la réécriture d'URL IIS et le routage ASP.NET :

  1. Le module IIS de réécriture d'URL peut être utilisé avec tout type d'application Web, ce qui inclut ASP.NET, PHP, ASP et les fichiers statiques. Le routage ASP.NET ne peut être utilisé qu'avec les applications Web basées sur .NET Framework.
  2. Le module IIS de réécriture d'URL fonctionne de la même manière, que le mode pipeline IIS intégré ou classique soit utilisé pour le pool d'applications. Pour le routage ASP.NET, il est préférable d'utiliser le mode pipeline intégré. Le routage ASP.NET peut fonctionner en mode classique, mais dans ce cas, les URL de l'application doivent inclure des extensions de fichier ou l'application doit être configurée pour utiliser le mappage du gestionnaire "*" dans IIS.
  3. Le module de réécriture d'URL peut prendre des décisions de réécriture basées sur les noms de domaine, les en-têtes HTTP et les variables du serveur. Par défaut, le routage ASP.NET fonctionne uniquement avec les chemins URL et avec l'en-tête HTTP-Method.
  4. En plus de la réécriture, le module URL-rewrite peut effectuer une redirection HTTP, émettre des codes d'état personnalisés et interrompre les demandes. Le routage ASP.NET n'effectue pas ces tâches.
  5. Le module de réécriture d'URL n'est pas extensible dans sa version actuelle. Le routage ASP.NET est entièrement extensible et personnalisable.

25voto

Haacked Points 31070

Il y a un grand article ici sur les différences entre les deux par un membre de l'équipe IIS.

Une mise en garde s'impose : pour les WebForms, vous devez faire attention à l'utilisation du routage. J'ai écrit un exemple d'implémentation de l'utilisation de le routage avec WebForms qui répond à ces préoccupations et qui, nous l'espérons, aidera à répondre à votre question.

7voto

DevelopingChris Points 12510

Voulez-vous que les urls formatées soient une usine pour la création de pages ?

ou voulez-vous faire disparaître le .aspx ?

La réécriture permet de faire disparaître le .aspx, ou simplement de mettre de l'ordre dans l'url.

Le routage consiste à examiner une demande et à déterminer quel objet doit la traiter. Ils semblent similaires, Phil Haack a quelques bons articles sur le sujet.

dans iis6, isapiRewrite, est très bon

4voto

Hugoware Points 13645

J'ai récemment écrit mon propre système de réécriture pour améliorer l'apparence des URL de mes sites. Fondamentalement, vous allez devoir écrire votre propre IHttpModule et l'ajouter à votre web.config pour intercepter les requêtes entrantes. Vous pouvez ensuite utiliser le paramètre HttpContext.Current.RewritePath pour modifier ce vers quoi vous pointez.

Vous voudrez également configurer votre site de façon à ce que utiliser l'aspnet_isapi pour tout .

Vous découvrirez de nombreux petits problèmes en cours de route, comme le fait d'essayer de travailler avec des pages qui utilisent des "queues" (comme pour les PageMethods), ou le cheminement des éléments de page et les postbacks de formulaires, mais vous y arriverez.

Si cela vous intéresse, je peux poster un lien vers le code et vous pourrez le vérifier. J'ai déjà résolu une grande partie des problèmes, vous pouvez donc le lire au fur et à mesure. Je suis sûr qu'il y a beaucoup d'autres personnes qui l'ont fait aussi et qui pourraient être de bonnes ressources aussi.

2voto

Dale Ragan Points 14495

Vous pouvez consulter mon réponse à cette question : ASP.NET - Créer votre propre système de routage . J'ai inclus quelques bonnes références pour vous aider à construire votre propre système de routage en utilisant soit la méthode de réécriture d'url, soit le nouveau moteur de routage que vous pouvez utiliser et qui est issu du projet ASP.NET MVC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X