Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Azra [Florent Santin]

.Net, X'Net, aucun lien de parenté V2.0

Actualités

  • MSN Alerts
    View Florent Santin's profile on LinkedIn
     Cet été j’en ai rien à coder : le retour
ASP.NET 2.0 Url rewriting / Url mapping
Dans ASP.NET 2.0 il est possible de base, sans aucun ajout d'httpmodules de faire de l'url rewriting.
 
Par exemple, le site www.loiduchaos.com (pub) est composé d'une seule page index.aspx contenant le menu, bordures, pied de page et affichant le contenu, extrait de WebUserControl en fonction de la variable "page" passée en querystring: index.aspx?page=albums , index.aspx?page=auteurs... Évidemment, en ASP.NET 2.0, les "MasterPages" évitent d'avoir ce genre de bidouilles.
 
Donc pour revenir à ASP.NET 2.0 justement et dans un soucis de référencèrent, il est plus intéressant d'avoir une page "albums.aspx" que "index?page=albums", c'est à ce moment qu'apparait l'Url rewriting ou  Url mapping.
 
Au niveau du Web.config de l'application, il suffit d'ajouter dans la section "system.web":
 
 
urlMappings enabled="true">
add url="~/albums.aspx" mappedUrl="~/index.aspx?page=albums"/>
urlMappings>
 
A chaque fois que quelqu'un demandera la page albums.aspx le serveur lui renverra la page index.aspx?page=albums, albums.aspx n'existant physiquement pas sur le serveur.
 
Vraiment pratique et rapide à mettre en oeuvre.
 

-----
Pour aller plus loin...
 
Maintenant, c'est pratique, mais il y'a des limites:
Lorsque l'on fait du mapping de "albums.aspx" vers "index.aspx", et que l'on demande la page "albums.aspx?arga=a&argb=b", on reçoit bel et bien "arga=a" et "argb=b" au niveau de la collection Page.Request.QueryString.
Lorsque l'on fait du mapping de "albums.aspx" vers "index.aspx?page=album", et que l'on demande la page "albums.aspx?arga=a&argb=b",  on reçoit uniquement page=album au niveau de la collection Page.Request.QueryString et non "page=album, arga=a et argb=b" et c'est bien dommage.
 
Donc à partir du moment ou l'on fait un mapping sur une url contenant des variables en querystring, il n'est plus possible d'utiliser d'autres variables de ce type au niveau de la page cible.
 
Il y''a toujours une petite bidouille a faire, en parsant Page.Request.RawUrl qui contient la chaîne complète de la page "Website/albums.aspx?arga=a&argb=b". Si quelqun à une meilleure solution, je suis preneur.
 
Dans tout les cas, il y'a de très bon "httpmodules" qui circulent sur le web: http://www.urlrewriting.net/en/Config.aspx (source ScottGu), ou il est toujours possible d'en réécrire un.
 
Posted: lundi 30 janvier 2006 01:17 par azra
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Florent a dit :

Passe sur Apache, tu auras moins de soucis :-)
# janvier 30, 2006 09:23

Poppyto a dit :

> Florent

Il n'est pas question de Serveur Web mais d'URL Rewriting. Apache ne traîte pas non plus les url rewriting par défaut, il faut lui rajouter un module.
# janvier 30, 2006 09:36

azra a dit :

Ca ne changera rien au niveau applicatif, trolleur inutile :P
# janvier 30, 2006 09:36

Nico a dit :

C'est vrai que c'est pratique, mais la solution de module à des limites. Un problème assez ennuyeux est si l'on souhaite rediriger "~/france/default.aspx" vers "~/default.aspx?pays=fr"

Et bien, on se retrouve avec une erreur 404. C'est normal car c'est IIS qui vérifie la présence des répertoires en premier, et si c'est bon, il passe la main a asp.net. Donc dans ce cas, on est obliger de créer des répertoires bidons.

De plus, le mapping est définie dans le web.config. Si l'on souhaite ajouter des pages dynamiquement, donc on écrit dans le web.config ce qui signifie une relance de l'appli web. Ce que l'on peut faire, c'est un petit module qui met le mapping dans une base, puis avec un petit système de cache... et le tour est joué.
# janvier 30, 2006 10:05

cyril a dit :

Nico >> Il suffit de décocher une case pour que IIS ne vérifie pas la présence des fichiers ;)

(ca se passe dans le gestionnaire IIS)
# janvier 30, 2006 12:23

Florent a dit :

Certes il faut un module, mais celui qui existe fonctionne plutôt bien il me semble. Maintenant, il existe peut-être un module utile sur IIS :-)
# janvier 30, 2006 14:38
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le il y a 12 heures et 55 minutes

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le il y a 18 heures et 38 minutes

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le il y a 19 heures et 52 minutes

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le il y a 20 heures et 36 minutes

- MS AutoCollage par alex# le il y a 21 heures et 21 minutes

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le il y a 21 heures et 47 minutes

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11

- Adopter votre Redo en 3D - Clone Virtuel - avec photosynth par RedoBlog - The .NET Gentleman !!! le 09-04-2008, 00:07

- [Expression Web] Astuce de la Semaine : Mettre en bouton ses macros dans une barre d'outils. par Expression Web & Me le 09-03-2008, 20:48