301 Reindirizzamento dopo l'abbinamento di una route ma prima dell'esecuzione del controller

StackOverflow https://stackoverflow.com/questions/1203218

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.

È stato utile?

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 + "/");            
      }
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top