jeudi 18 février 2010

Intercepter les requêtes entrantes en ASP.NET

L'interception des requêtes entrante en Asp.Net prend place dans le fichier Global.Asax.
Global.Asax - Application_BeginRequest
Permet d’intercepter les appels, cependant, l’objet session n’est pas encore disponible.
Plus d'info.

Global.Asax – Application_PreRequestHandlerExecute
C’est la place la plus sur pour intercepter les appels avant l’appel de la page.
A ce stade, l’objet session est disponible (mais pas dans toutes les conditions).
Attention:
PreRequestHandlerExecute intercepte tous les appels sur l’application (CSS et image inclus, dans ce cas Session n’est pas disponible).
Il existe également des cas ou HttpContext.Current n’est pas accessible.

Plus d'information sur l'article Working with ASP.NET global.asax file ou ce ce billet.

Voici un petit bout de code issus de mes quelques premiers tests dans global.asax
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    // Code that runs when a new session is started
    HttpContext ctx = HttpContext.Current;
    if( ctx != null )
    if( ctx.Request.Url.ToString().ToLower().IndexOf( ".asp" ) > 0 ) // incomming request must be asp page
    if( ctx.Request.Url.ToString().ToLower().IndexOf( "default.asp" ) <= 0 ) // incomming request cannot be defautlt.asp
    if (Session["username"] == null)
    {
        if (Session["username"] == null)
        {
            string sJumpUrl = ctx.Request.Url.ToString();
            Session["AfterLoginUrl"] = sJumpUrl;
            // Display the Login Box instead
            Server.Transfer("Default.aspx");
        }              
    }
}

Aucun commentaire: