301 Reindirizzamento dopo l'abbinamento di una route ma prima dell'esecuzione del controller
-
05-07-2019 - |
Domanda
Vorrei aggiungere una barra finale a qualsiasi URL che corrisponda a un percorso valido ma che attualmente non termina in una barra, ad esempio www.esempio.it/url
Dopo che un URL è stato abbinato a un percorso valido, vorrei reindirizzare 301 allo stesso URL, ma aggiungere la barra finale, ad esempio www.example.com/url/
Ho passato un po 'di tempo a esaminarlo, ma non riesco a capirlo.
Credo che le rotte siano abbinate all'evento PostResolveRequestCache, ma non so come accedere alla routedata durante o dopo quell'evento per vedere se è stata trovata una rotta valida. Se posso confermare che è stato associato un percorso valido, posso controllare l'URL per assicurarmi che finisca in una barra.
Spero che sia abbastanza chiaro, fammi sapere se hai bisogno di maggiori informazioni.
Soluzione
Presumo che tu stia cercando di eliminare contenuti duplicati a fini SEO.
Scott Hanselman dice che puoi farlo con il modulo IIS7 Rewrite (stai eseguendo IIS7?) Il suo post su http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx descrive il processo.
Altri suggerimenti
Sembra perfetto per il filtro azione:
public class EnforceTrailingSlashAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.Path.EndsWith("/"))
{
filterContext.Result = new RedirectResult(
filterContext.HttpContext.Request.Path + "/");
}
}
}