Staticizzare gli URL ed evitarne il cambio nel PostBack

di Andrea Zani, in UserScript, ASP.NET, HttpHandler,

Nello script #618 abbiamo visto una tecnica che permette l'utilizzo di "alias" per le nostre pagine ASP.NET, usando la più semplice delle tecniche per assolvere a questo compito.
E' dunque chiaro il problema che tale tecnica comporta riguardo il PostBack, per cui ne vediamo una ulteriore che lo risolve, utilizzando un HttpHandler.

Nell'esempio precedente volevamo abbreviare l'url di una nostra pagina:
www.nomesito.xxx/articolo.aspx?codice=001

E volevamo utilizzare per chiamare ancora questa pagina l'url più semplice:
www.nomesito.xxx/articolo001.aspx

Innanzitutto è necessario modificare il web.config aggiungendo questa sezione:

<httpHandlers>
  <add verb="*" path="articolo*.aspx" type="MyChangeUrl,Nome_assembly_Progetto" />
</httpHandlers>

Quindi si deve creare una nuova classe che implementi l'interfaccia IHttpHandlerFactory:

Public Class MyChangeUrl
  Implements IHttpHandlerFactory

  Public Function GetHandler(ByVal context As HttpContext, ByVal requestType As String, ByVal url As String, ByVal path As String) As IHttpHandler Implements IHttpHandlerFactory.GetHandler
    Dim pagina As String = context.Request.MapPath("articolo.aspx")
    Return PageParser.GetCompiledPageInstance(url, pagina, context)
  End Function

  Public Sub ReleaseHandler(ByVal handler As IHttpHandler) Implements IHttpHandlerFactory.ReleaseHandler
    End Sub

End Class

Adesso ogni pagina richiamata dal browser nel formato "articolo*.aspx" sarà reindirizzata ad "articolo.aspx" lasciando l'URL presente nel browser invariato anche in caso di PostBack.
Rimane il problema di prendere il codice dell'articolo interessato visto che esso non sarà più presente nella collection Request. Per far questo dobbiamo modificare la pagina "articolo.aspx" in modo che cerchi il parametro interessato direttamente dall'interno dell'URL:

sub Page_Load()
  dim codice as string
  codice=System.IO.Path.GetFileNameWithoutExtension(Request.Path).Substring(8)
  ' substring per prendere dal 8 carattere in poi, cioè il codice
  ' senza il suffisso .aspx
  codice=codice.Substring(0,codice.indexOf(".")-1)
  ...
end sub

E con questo è tutto. Una tecnica facile, che al tempo stesso evita, per l'appunto, che ci siano problemi nel PostBack.

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