Permanent Redirect con ASP.NET MVC 2

di Gianluca Esposito, in ASP.NET 4.0,

La prossima versione di ASP.NET MVC 3 introdurrà nuovi tipi di ActionResult non presenti nella release 2 del framework, per andare incontro incontro ad ulteriori esigenze legate allo sviluppo web. Tra questi spicca la classe HttpRedirectResult, dotata della proprietà booleana "Permanent", che consentirà di specificare la natura del redirect.

In particolare, valorizzandola a true si ottiene un redirect permanente, corrispondente al codice HTTP 301 (Moved Permanently), particolarmente utile per notificare ai motori di ricerca lo spostamento definitivo di una risorsa, in modo che questa mantenga il page rank acquisito in precedenza.

La stessa funzionalità è comunque replicabile anche in ASP.NET MVC 2 utilizzando un custom action result, ossia una classe che erediti da ActionResult ed effettui l'override del metodo ExecuteResult, responsabile della gestione del comportamento dell'action result.

public class PermanetRedirectResult : ActionResult
{
  private string _redirectURL;

  // Costruttore
  public PermanetRedirectResult(string redirectURL)
  {
    _redirectURL = redirectURL;
  }
 
  public override void ExecuteResult(ControllerContext context)
  {
    // Pulisce la response
    HttpContext.Current.Response.Clear();
 
    // Imposta lo status code e l'indirizzo di redirect
    context.HttpContext.Response.StatusCode = 301;
    context.HttpContext.Response.RedirectLocation = _redirectURL;
  }
}


Il codice di stato HTTP 301 è accompagnato da un URL a cui far puntare il redirect, che valorizziamo nel costruttore e richiamiamo nella costruzione della risposta all'interno del metodo ExecuteResult. Chi usa ASP.NET MVC 2 all'interno di ASP.NET 4.0, eventualmente può anche implementare questo metodo tramite la nuova funzionalità HttpResponse.RedirectPermanent.

A questo punto è sufficiente utilizzarlo secondo le proprie necessità negli action methods coinvolti dal redirect.

public ActionResult Esempio()
{
  // ...
  return new PermanetRedirectResult("https://www.aspitalia.com");
}

Così facendo la richiesta pervenuta all'action method "Esempio" risponderà con il codice HTTP 301, effettuando il redirect al'url che abbiamo definito (https://www.aspitalia.com).

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi