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
    MS Days - MSDN et TechNet Tour spécial Dev
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

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le il y a 18 heures et 50 minutes

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52

- Monitoring et Patron de méthode par Le blog de Marc Ranchin le 10-08-2008, 10:22