2011-01-13 13 views
8

Come posso utilizzare l'evento PostAuthenticateRequest di Global.asax? Sto seguendo this tutorial e menziona che devo usare l'evento PostAuthenticateRequest. Quando ho aggiunto l'evento Global.asax ha creato due file, il markup e il file code-behind. Ecco il contenuto del file code-behindCome si verifica l'associazione eventi Global.asax PostAuthenticateRequest?

using System; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace authentication 
{ 
    public class Global : System.Web.HttpApplication 
    {  
     protected void Application_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Session_Start(object sender, EventArgs e) 
     {  
     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
     } 

     protected void Application_AuthenticateRequest(object sender, EventArgs e) 
     {  
     } 

     protected void Application_Error(object sender, EventArgs e) 
     {  
     } 

     protected void Session_End(object sender, EventArgs e) 
     {  
     } 

     protected void Application_End(object sender, EventArgs e) 
     {  
     } 
    } 
} 

Ora, quando si digita il

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

Si chiama successo. Ora voglio sapere come è il PostAuthenticateRequest associato a questo metodo Application_OnPostAuthenticateRequest? Come posso cambiare il metodo con un altro?

risposta

14

magia ..., un meccanismo chiamato Auto Evento Wireup, lo stesso motivo è possibile scrivere

Page_Load(object sender, EventArgs e) 
{ 
} 

nel code-behind e il metodo verrà automaticamente chiamato quando la pagina viene caricata.

MSDN description for System.Web.Configuration.PagesSection.AutoEventWireup property:

Ottiene o imposta un valore che indica se gli eventi per le pagine ASP.NET vengono collegati automaticamente alle funzioni di gestione degli eventi.

Quando AutoEventWireup è true, i gestori sono tenuti automaticamente agli eventi in fase di esecuzione in base al loro nome e la firma. Per ogni evento, ASP.NET cerca un metodo denominato in base al modello Page_eventname(), ad esempio Page_Load() o Page_Init(). ASP.NET cerca innanzitutto un overload con la tipica firma di gestore di eventi (ovvero, specifica i parametri Object e EventArgs). Se un gestore eventi con questa firma non viene trovato, ASP.NET cerca un overload che non ha parametri. Maggiori dettagli in this answer.

Se si voleva farlo in modo esplicito si potrebbe scrivere il seguente invece

public override void Init() 
{ 
    this.PostAuthenticateRequest += 
     new EventHandler(MyOnPostAuthenticateRequestHandler); 
    base.Init(); 
} 

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e) 
{ 
} 
+0

ho sprecato un'ora perché non stava mostrando in Intellisense e ho pensato che avrei potuto sottoscrivere l'evento in qualche modo. Stavo per postare chiedendo come implementare l'evento ma poi ho pensato di fare un tentativo e vedere se ho qualche errore e voilà! ha funzionato :) Grazie comunque – Tux

+6

attenzione che vale a dire. Application_Start o Session_Start possono essere gestiti SOLO attraverso il meccanismo Auto Event Wireup, non ci sono eventi espliciti per loro nella classe HttpApplication a cui è possibile abbonarsi. –

+0

Grazie per avermelo fatto sapere. – Tux