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.