Je suis actuellement un peu nouveau sur Microsoft MVC4 et je ne comprends pas bien le routage comme je le voudrais. Ce que j'essaie de faire est de rendre mes URL plus lisibles par l'homme. À l'heure actuelle, j'ai URL qui ressemblent à ceci:MVC4 URL réécriture aliasing pour "URLs plus jolies"
- foo.com/UserProfile/Details/6
- foo.com/UserExperience/Details/
- foo.com/UserSpecificController/Edit/8
Tous les contrôleurs de l'utilisateur sont PREFIXÉ je « utilisateur » demandais s'il était possible de changer les URL afin qu'ils ressemblent à ceci:
- foo.com/ u/profil/Détails/6
- foo.com/u/Experience/Details/
- foo.com/u/SpecificController/Edit/8
Ma première tentative a été avec IIS:
<rewrite>
<rules>
<rule name="AddTrailingSlashRule1" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}/" />
</rule>
<rule name="Pretty User Redirect" enabled="false" stopProcessing="true">
<match url="User(.*)/(.*)" />
<action type="Redirect" url="u/{R:1}/{R:2}" />
<conditions>
</conditions>
</rule>
<rule name="User pretty URL Rewrite">
<match url="u/(.*)/(.*)" />
<action type="Rewrite" url="User{R:1}/{R:2}" />
</rule>
</rules>
</rewrite>
Cela a fonctionné très bien sauf que je recevrais/u/sur tous mes liens, partout ...
Par exemple: foo.com/Home/WhatWeDo/
sortirait comme: foo.com/u/Home/WhatWeDo/
Ce serait alors 404.
J'utilise la configuration de routage par défaut
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Et tous mes liens sont dessinés avec @ Html.ActionLink (...)
Si quelqu'un pouvait faire la lumière sur ce sujet, cela serait grandement apprécié.
Cela semble un peu élégant, je devrais le faire pour chacun de mes contrôleurs? Existe-t-il un moyen d'ajouter mon propre code/module qui réécrirait les URL comme je le souhaite? – William
Peut-être que vous voulez des zones dans votre projet. Ensuite, vous allez changer les noms des classes de contrôleurs et ne pas vous soucier du routage/réécriture personnalisé. – Jasen