web-dev-qa-db-fra.com

IIS Réécriture d'URL vs routage d'URL

J'avais l'intention d'utiliser le routage d'URL pour une application Web Forms. Mais, après avoir lu quelques posts , je ne sais pas si c'est une approche facile.

Est-il préférable d'utiliser le module de réécriture d'URL pour les formulaires Web? Mais, c'est uniquement pour IIS7. Au départ, il y avait un certain buzz selon lequel le routage d'URL était totalement découplé d'Asp.Net MVC et pouvait être utilisé pour les formulaires Web.

J'adorerais entendre des suggestions ..

48
Gulzar Nazim

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

Une mise en garde que je conseillerais est que pour les formulaires Web, vous devez être prudent lorsque vous utilisez le routage. J'ai écrit un exemple d'implémentation de la façon dont vous utiliseriez routage avec WebForms qui répond à ces préoccupations et, espérons-le, aidera à répondre à votre question.

25
Haacked

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 fait une demande au serveur Web pour une URL particulière, le composant de réécriture d'URL analyse l'URL demandée et la change en 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 décide quel gestionnaire utiliser pour traiter la demande.

IIS URL Rewriting

Routage ASP.NET

Le routage ASP.NET est implémenté en tant que module de code managé qui se connecte au pipeline de traitement de demande IIS à l'étape Resolve Cache (événement PostResolveRequestCache) et à l'étape Map Handler (PostMapRequestHandler). ASP. Le routage 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'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 finira par traiter l'URL réécrite. En outre, le gestionnaire de demande réel 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.

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

  1. Le module de réécriture d'URL IIS peut être utilisé avec tout type d'application Web, y compris ASP.NET, PHP, ASP et les fichiers statiques. Le routage ASP.NET ne peut être utilisé qu'avec .NET Applications Web basées sur le framework.
  2. Le module de réécriture d'URL IIS fonctionne de la même manière, qu'il soit intégré ou classique IIS est 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 de gestionnaire "*" dans IIS.
  3. Le module de réécriture d'URL peut prendre des décisions de réécriture en fonction des noms de domaine, des en-têtes HTTP et des variables de serveur. Par défaut, le routage ASP.NET fonctionne uniquement avec les chemins d'URL et avec l'en-tête de la méthode HTTP.
  4. Outre la réécriture, le module de réécriture d'URL peut effectuer une redirection HTTP, émettre des codes d'état personnalisés et abandonner 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.
40
splattne

Voulez-vous que les URL formatées soient une fabrique de pages de génération?

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

la réécriture, c'est pour faire disparaître le .aspx, ou juste pour ranger l'url.

Le routage, c'est pour regarder une requête et déterminer quel objet doit la gérer. Ils semblent similaires, phil haack a quelques bons articles sur le sujet.

dans iis6, isapiRewrite, est très bon

7
DevelopingChris

J'ai récemment écrit mon propre système de réécriture pour améliorer l'apparence des URL sur mes sites. Fondamentalement, vous devrez écrire votre propre IHttpModule et l'ajouter à votre web.config pour intercepter les demandes entrantes. Vous pouvez ensuite utiliser HttpContext.Current.RewritePath pour modifier ce que vous pointez.

Vous voudrez également configurer votre site pour tilisez le aspnet_isapi pour tout .

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

Si vous êtes intéressé, je peux poster un lien vers le code et vous pouvez le vérifier. J'ai déjà résolu un grand nombre de problèmes afin que vous puissiez le lire au fur et à mesure. Je suis sûr qu'il y a aussi beaucoup d'autres personnes qui ont fait cela et qui pourraient aussi être de bonnes ressources.

4
Hugoware

Vous voudrez peut-être consulter mon réponse à cette question: ASP.NET - Construire votre propre système de routage . J'inclus de bonnes références pour vous aider à créer votre propre système de routage en utilisant la méthode de réécriture d'URL ou le nouveau moteur de routage que vous pouvez utiliser, issu du projet ASP.NET MVC.

2
Dale Ragan

Le projet Dynamic Data disponible avec .Net 3.5 SP1 présente un bon exemple d'implémentation de routage d'URL.

0
Norge

Pour la réécriture d'URL sur IIS, IIRF fonctionne dans IIS5, 6, 7. Gratuit. Facile. Vite. Open source. Prise en charge des expressions régulières.

0
Cheeso