2011-01-13 8 views
8

Wie kann ich das PostAuthenticateRequest Event von Global.asax verwenden? Ich folge this tutorial und es erwähnt, dass ich das PostAuthenticateRequest Ereignis verwenden muss. Als ich das Global.asax-Ereignis hinzugefügt habe, hat es zwei Dateien erstellt, die Markup- und die Code-Behind-Datei. Hier ist der Inhalt des Code-Behind-DateiWie erfolgt die Bindung des Global.asax PostAuthenticateRequest-Ereignisses?

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) 
     {  
     } 
    } 
} 

Nun, wenn ich geben Sie den

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

Es wird erfolgreich aufgerufen. Jetzt möchte ich wissen, wie ist die PostAuthenticateRequest gebunden an diese Application_OnPostAuthenticateRequest Methode? Wie kann ich die Methode ändern?

Antwort

14

Magie ..., ein Mechanismus Auto Ereignis Wireup, aus dem gleichen Grund Sie

genannt
Page_Load(object sender, EventArgs e) 
{ 
} 

in Ihrem Code-Behind schreiben kann, und das Verfahren wird automatisch beim Laden der Seite aufgerufen werden.

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

Ruft einen Wert ab, der angibt, ob Ereignisse für ASP.NET-Seiten automatisch auf die Funktionen Ereignisverarbeitung verbunden sind.

Wenn AutoEventWireuptrue ist, werden Handler automatisch auf Ereignisse während der Laufzeit auf ihren Namen und Unterschrift auf Basis gebunden. Für jedes Ereignis sucht ASP.NET nach einer Methode, die nach dem Muster Page_eventname() benannt ist, z. B. Page_Load() oder Page_Init(). ASP.NET sucht zuerst nach einer Überladung, die die typische Ereignishandler-Signatur aufweist (dh sie gibt Object und EventArgs Parameter an). Wenn ein Ereignishandler mit dieser Signatur nicht gefunden wird, sucht ASP.NET nach einer Überladung ohne Parameter. Weitere Details in this answer.

Wenn Sie es explizit tun wollte würden Sie das folgende statt

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

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

ich verschwendet eine Stunde schreiben, weil es nicht in Intellisense zeigt wurde, und ich dachte, ich könnte irgendwie mit dem Ereignis abonnieren haben. War im Begriff zu fragen, wie man das Event implementiert, aber dann dachte ich, lass es uns versuchen und sehen, ob ich irgendwelche Fehler bekomme und voila! es hat funktioniert :) Danke jedenfalls – Tux

+6

Vorsicht, dass ie. Application_Start oder Session_Start können NUR über den automatischen Ereignis-Wirelup-Mechanismus verarbeitet werden, für die in der HttpApplication-Klasse keine expliziten Ereignisse vorliegen, die Sie abonnieren können. –

+0

Danke, dass Sie mich das wissen lassen. – Tux