Création d’URL lisibles dans des sites pages Web ASP.NET (Razor)

par Tom FitzMacken

Cet article décrit le routage dans un site web pages Web ASP.NET (Razor), et comment cela vous permet d’utiliser des URL plus lisibles et meilleures pour le RÉFÉRENCEMENT.

Ce que vous allez apprendre :

  • Comment ASP.NET utilise le routage pour vous permettre d’utiliser des URL plus lisibles et interrogeables.

Versions logicielles utilisées dans le tutoriel

  • pages Web ASP.NET (Razor) 3

Ce tutoriel fonctionne également avec pages Web ASP.NET 2.

À propos du routage

Les URL des pages de votre site peuvent avoir un impact sur le fonctionnement du site. Une URL « conviviale » peut faciliter l’utilisation du site. Il peut également aider à l’optimisation des moteurs de recherche (SEO) pour le site. ASP.NET sites web incluent la possibilité d’utiliser automatiquement des URL conviviales.

ASP.NET vous permet de créer des URL explicites qui décrivent les actions de l’utilisateur au lieu de simplement pointer vers un fichier sur le serveur. Considérez ces URL pour un blog fictif :

  • http://www.contoso.com/Blog/blog.cshtml?categories=hardware
  • http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30

Comparez ces URL aux suivantes :

  • http://www.contoso.com/Blog/categories/hardware/
  • http://www.contoso.com/Blog/2009/November

Dans la première paire, un utilisateur doit savoir que le blog est affiché à l’aide de la page blog.cshtml , puis doit construire une chaîne de requête qui obtient la catégorie ou la plage de dates appropriée. Le deuxième ensemble d’exemples est beaucoup plus facile à comprendre et à créer.

Les URL du premier exemple pointent également directement vers un fichier spécifique (blog.cshtml). Si, pour une raison quelconque, le blog était déplacé vers un autre dossier sur le serveur, ou si le blog était réécrit pour utiliser une autre page, les liens seraient incorrects. Le deuxième ensemble d’URL ne pointe pas vers une page spécifique. Par conséquent, même si l’implémentation ou l’emplacement du blog change, les URL sont toujours valides.

Dans pages Web ASP.NET, vous pouvez créer des URL plus conviviales comme celles des exemples ci-dessus, car ASP.NET utilise le routage. Le routage crée un mappage logique à partir d’une URL vers une ou plusieurs pages qui peuvent répondre à la demande. Étant donné que le mappage est logique (et non physique, vers un fichier spécifique), le routage offre une grande flexibilité dans la façon dont vous définissez les URL de votre site.

Fonctionnement du routage

Quand ASP.NET traite une demande, il lit l’URL pour déterminer comment l’acheminer. ASP.NET tente de faire correspondre des segments individuels de l’URL aux fichiers sur le disque, en allant de gauche à droite. S’il existe une correspondance, tout ce qui reste dans l’URL est transmis à la page en tant qu’informations de chemin.

Imaginez qu’une personne effectue une requête à l’aide de cette URL :

http://www.contoso.com/a/b/c

La recherche se déroule comme suit :

  1. Existe-t-il un fichier avec le chemin d’accès et le nom de /a/b/c.cshtml ? Si c’est le cas, exécutez cette page et ne lui transmettez aucune information. Sinon...
  2. Existe-t-il un fichier avec le chemin d’accès et le nom de /a/b.cshtml ? Si c’est le cas, exécutez cette page et transmettez-lui la valeur c . Sinon...
  3. Existe-t-il un fichier avec le chemin et le nom de /a.cshtml ? Si c’est le cas, exécutez cette page et transmettez-lui la valeur b/c .

Si la recherche n’a trouvé aucune correspondance exacte pour les fichiers .cshtml dans leurs dossiers spécifiés, ASP.NET continue à rechercher ces fichiers à son tour :

  1. /a/b/c/default.cshtml (aucune information de chemin d’accès).
  2. /a/b/c/index.cshtml (aucune information de chemin d’accès).

Notes

Pour être clair, les demandes pour des pages spécifiques (c’est-à-dire les demandes qui incluent l’extension de nom de fichier .cshtml ) fonctionnent exactement comme prévu. Une requête comme http://www.contoso.com/a/b.cshtml exécutera correctement la page b.cshtml .

À l’intérieur d’une page, vous pouvez obtenir les informations de chemin via la propriété de UrlData la page, qui est un dictionnaire. Imaginez que vous disposez d’un fichier nommé ViewCustomers.cshtml et que votre site obtient cette requête :

http://mysite.com/myWebSite/ViewCustomers/1000

Comme décrit dans les règles ci-dessus, la demande est envoyée à votre page. À l’intérieur de la page, vous pouvez utiliser du code comme le suivant pour obtenir et afficher les informations de chemin d’accès (dans ce cas, la valeur « 1000 ») :

<!DOCTYPE html>
<html>
    <head>
        <title>URLData</title>
    </head>
    <body>
      Customer ID: @UrlData[0].ToString()
    </body>
</html>

Notes

Étant donné que le routage n’implique pas de noms de fichiers complets, il peut y avoir ambiguïté si vous avez des pages qui ont le même nom, mais des extensions de nom de fichier différentes (par exemple, MyPage.cshtml et MyPage.html). Afin d’éviter les problèmes de routage, il est préférable de vous assurer que votre site n’a pas de pages dont les noms diffèrent uniquement par leur extension.

Ressources supplémentaires

WebMatrix - URL, UrlData et routage pour LE RÉFÉRENCEMENT. Cette entrée de blog de Mike Brind fournit des détails supplémentaires sur le fonctionnement du routage dans pages Web ASP.NET.