301 Redirect après la mise en correspondance d'une route mais avant l'exécution du contrôleur
-
05-07-2019 - |
Question
J'aimerais ajouter une barre oblique à la fin de toute URL qui correspond à un itinéraire valide, mais ne se termine pas actuellement par une barre oblique, c'est-à-dire www.example.com/url
.Une fois qu'une URL est associée à un itinéraire valide, je voudrais rediriger vers la même URL, mais ajouter la barre oblique finale, à savoir www.example.com/url /
.J'ai passé un peu de temps à examiner cela, mais je n'arrive pas à comprendre.
Je pense que les itinéraires sont appariés dans l'événement PostResolveRequestCache, mais je ne sais pas comment accéder aux routedata pendant ou après cet événement pour voir si un itinéraire valide a été apparié. Si je peux confirmer qu'un itinéraire valide a été mis en correspondance, je peux vérifier l'URL pour m'assurer qu'elle se termine par une barre oblique.
J'espère que c'est assez clair, dites-moi si vous avez besoin de plus d'informations.
La solution
Je suppose que vous essayez d'éliminer le contenu en double à des fins de référencement.
Scott Hanselman dit que vous pouvez faire cela avec le module IIS7 Rewrite (exécutez-vous IIS7?) Son message sur http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx décrit le processus.
Autres conseils
Cela ressemble parfaitement à un filtre d’action:
public class EnforceTrailingSlashAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.Path.EndsWith("/"))
{
filterContext.Result = new RedirectResult(
filterContext.HttpContext.Request.Path + "/");
}
}
}