Gestione degli errori e HttpContext con ASP.NET 3.5 SP1

di Marco De Sanctis, in ASP.NET 3.5 SP 1,

Con il SP1 del .NET Framework 3.5 è possibile modificare a runtime l'HttpHandler designato per la gestione di una determinata richiesta HTTP, grazie all'introduzione del metodo RemapHandler:

HttpContext.Current.RemapHandler(nuovoHandler);

Tipicamente, esso viene invocato all'interno di un HttpModule che, in base ad alcune condizioni e comunque prima dell'evento MapRequestHandler, può decidere di elaborare la risposta tramite un handler differente da quello specificato nel web.config. Un esempio può essere quello della sezione Press di un sito web, contenente gallerie di immagini che devono essere presentate con o senza un watermark attestante il copyright, a seconda che l'utente sia autenticato (e magari paghi un abbonamento per lo sfruttamento dei diritti) o meno.
L'esempio allegato utilizza l'handler WatermarkedImageHandler per aggiungere un watermark alle immagini JPEG, impostandolo all'interno del file di configurazione come handler di default per questo tipo di file (ovviamente dopo aver avuto cura di configurare correttamente IIS per servire i file .jpg tramite il worker process di ASP.NET):

<add verb="*" path="*.jpg" 
     type="Sp1SampleLibrary.WatermarkedImageHandler, Sp1SampleLibrary" />

Inoltre registra anche un HttpModule:

<add name="ImageModule" type="Sp1SampleLibrary.ImageModule, Sp1SampleLibrary" />

che, nel caso in cui l'utente risulti autenticato, si avvale di HttpContext.RemapHandler per inoltrare la richiesta ad un secondo HttpHandler, chiamato PlainImageHandler, mostrando in questo modo l'immagine originale, priva di watermark:

static void context_PostAuthenticateRequest(object sender, EventArgs e)
{
  HttpContext context = HttpContext.Current;
  string phisicalPath = context.Request.PhysicalPath;
  bool authenticated = context.User != null &&
                       context.User.Identity != null &&
                       context.User.Identity.IsAuthenticated;

  if (Path.GetExtension(phisicalPath).ToLower().EndsWith("jpg") &&
      authenticated)
    HttpContext.Current.RemapHandler(new PlainImageHandler());
}

Un'altra novità del SP 1 riguarda invece il file web.config, ed in particolare la sezione CustomErrors. Grazie all'attributo redirectMode è ora possibile decidere se, nel redirect ad una pagina custom di errore, l'URL mostrato nella finestra del browser debba variare (ResponseRedirect) o rimanere il medesimo della pagina che ha sollevato l'eccezione (ResponseRewrite).

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="500" redirect="CustomErrorPage.aspx"/>
</customErrors>

Quest'ultima impostazione è particolarmente comoda in quanto consente, alla ricezione di un messaggio di errore, di tentare un refresh della pagina semplicemente premendo F5 invece che essere costretti a navigare nella history del browser come accadeva precedentemente, oltre a consentire in maniera più semplice di gestire eventuali codici HTTP di errore.

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