Global.asax-Dateien, manchmal auch ASP.NET-Anwendungsdateien genannt, bieten einen zentralen Ort für die Reaktion auf Ereignisse auf Anwendungs- oder Modulebene. Mit dieser Datei können Sie Anwendungssicherheit und andere Aufgaben implementieren.
Die Datei Global.asax ist so konfiguriert, dass jede direkte HTTP-Anfrage (über die URL) automatisch abgelehnt wird, sodass Benutzer ihre Inhalte nicht herunterladen oder anzeigen können. Das ASP.NET-Seitenframework erkennt automatisch alle an der Datei Global.asax vorgenommenen Änderungen. Das ASP.NET-Seitenframework startet die Anwendung neu, nachdem Global.asax geändert wurde. Dazu gehört das Schließen aller Browsersitzungen, das Entfernen aller Statusinformationen und das Neustarten der Anwendungsdomäne.
Die Datei Global.asax erbt von der HttpApplication-Klasse, die einen Pool von HttpApplication-Objekten verwaltet und bei Bedarf Objekte im Pool Anwendungen zuweist. Die Datei Global.asax enthält die folgenden Ereignisse:
· Application_Init: Dieses Ereignis wird ausgelöst, wenn die Anwendung zum ersten Mal instanziiert oder aufgerufen wird. Es wird für alle HttpApplication-Objektinstanzen aufgerufen.
· Application_Disposed: Wird ausgelöst, bevor die Anwendung zerstört wird. Dies ist ein idealer Ort, um zuvor verbrauchte Ressourcen auszuräumen.
· Application_Error: Dieses Ereignis wird ausgelöst, wenn in der Anwendung eine nicht behandelte Ausnahme auftritt.
· Application_Start: Dieses Ereignis wird ausgelöst, wenn die erste Instanz der HttpApplication-Klasse erstellt wird. Sie können damit Objekte erstellen, auf die alle HttpApplication-Instanzen zugreifen können.
· Application_End: Dieses Ereignis wird ausgelöst, wenn die letzte Instanz der HttpApplication-Klasse zerstört wird. Es wird nur einmal während der Lebensdauer einer Anwendung ausgelöst.
· Application_BeginRequest: Wird ausgelöst, wenn eine Anwendungsanfrage empfangen wird. Bei einer Anfrage handelt es sich um das erste Ereignis, das ausgelöst wird. Bei der Anfrage handelt es sich in der Regel um eine vom Benutzer eingegebene Seitenanforderung (URL).
· Application_EndRequest: Das letzte von der Anwendung angeforderte Ereignis.
· Application_PreRequestHandlerExecute: Dieses Ereignis wird ausgelöst, bevor das ASP.NET-Seitenframework mit der Ausführung eines Ereignishandlers wie einer Seite oder eines Webdienstes beginnt.
· Application_PostRequestHandlerExecute: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework die Ausführung eines Ereignishandlers beendet.
· Applcation_PreSendRequestHeaders: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework HTTP-Header an den anfordernden Client (Browser) sendet.
· Application_PreSendContent: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework Inhalte an den anfordernden Client (Browser) sendet.
· Application_AcquireRequestState: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework den aktuellen Status (Sitzungsstatus) in Bezug auf die aktuelle Anforderung erhält.
· Application_ReleaseRequestState: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework die Ausführung aller Ereignishandler abgeschlossen hat. Dadurch speichern alle Zustandsmodule ihre aktuellen Zustandsdaten.
· Application_ResolveRequestCache: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework eine Autorisierungsanforderung abschließt. Dadurch kann das Cache-Modul Anforderungen aus dem Cache bedienen und so die Ausführung von Event-Handlern umgehen.
· Application_UpdateRequestCache: Dieses Ereignis wird ausgelöst, wenn das ASP.NET-Seitenframework die Ausführung des Ereignishandlers abschließt, sodass das Cache-Modul die Antwortdaten zur Verwendung bei der Beantwortung nachfolgender Anforderungen speichern kann.
· Application_AuthenticateRequest: Dieses Ereignis wird ausgelöst, wenn das Sicherheitsmodul eine gültige Identität für den aktuellen Benutzer festlegt. Zu diesem Zeitpunkt werden die Anmeldeinformationen des Benutzers überprüft.
· Application_AuthorizeRequest: Dieses Ereignis wird ausgelöst, wenn das Sicherheitsmodul bestätigt, dass ein Benutzer auf die Ressource zugreifen kann.
· Session_Start: Dieses Ereignis wird ausgelöst, wenn ein neuer Benutzer auf die Anwendungswebsite zugreift.
· Session_End: Dieses Ereignis wird ausgelöst, wenn die Sitzung eines Benutzers abläuft, endet oder wenn er die Anwendungswebsite verlässt.
Ein zentrales Problem bei der Verwendung dieser Ereignisse besteht darin, die Reihenfolge zu kennen, in der sie ausgelöst werden. Die Ereignisse „Application_Init“ und „Application_Start“ werden einmalig ausgelöst, wenn die Anwendung zum ersten Mal gestartet wird. Ebenso werden die Ereignisse „Application_Disposed“ und „Application_End“ einmal ausgelöst, wenn die Anwendung beendet wird. Darüber hinaus werden sitzungsbasierte Ereignisse (Session_Start und Session_End) nur verwendet, wenn Benutzer die Site betreten und verlassen. Die übrigen Ereignisse verarbeiten Anwendungsanfragen. Die Reihenfolge, in der diese Ereignisse ausgelöst werden, ist:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
· Application_AcquireRequestState
· Application_PreRequestHandlerExecute
· Application_PreSendRequestHeaders
· Application_PreSendRequestContent
· <<Execution Code>>
· Application_PostRequestHandlerExecute
· Application_ReleaseRequestState
· Application_UpdateRequestCache
· Application_EndRequest
diese Ereignisse Wird oft aus Sicherheitsgründen verwendet. Das folgende C#-Beispiel demonstriert die verschiedenen Global.asax-Ereignisse und verwendet das Application_Authenticate-Ereignis, um die formularbasierte Authentifizierung über Cookies abzuschließen. Darüber hinaus füllt das Ereignis „Application_Start“ eine Anwendungsvariable und „Session_Start“ eine Sitzungsvariable. Das Application_Error-Ereignis zeigt eine einfache Meldung an, die den aufgetretenen Fehler beschreibt.
protected void Application_Start(Object sender, EventArgs e) {
Application["Title"] = "Builder.com-Beispiel";
}
protected void Session_Start(Object sender, EventArgs e) {
Sitzung["startValue"] = 0;
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
//Extrahieren Sie das Formularauthentifizierungs-Cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if(null == authCookie) {
// Es gibt kein Authentifizierungs-Cookie.
zurückkehren;
}
FormsAuthenticationTicket authTicket = null;
versuchen {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} Catch(Exception ex) {
// Ausnahmedetails protokollieren (der Einfachheit halber weggelassen)
zurückkehren;
}
if (null == authTicket) {
// Cookie konnte nicht entschlüsselt werden.
zurückkehren;
}
// Beim Erstellen des Tickets wurde die UserData-Eigenschaft zugewiesen
// eine durch Pipes getrennte Zeichenfolge von Rollennamen.
string[2] Rollen
Rollen[0] = „Eins“
Rollen[1] = „Zwei“
// Ein Identitätsobjekt erstellen
FormsIdentity id = new FormsIdentity( authTicket );
// Dieser Prinzipal fließt durch die gesamte Anfrage.
GenericPrincipal Principal = new GenericPrincipal(id, Roles);
// Das neue Hauptobjekt an das aktuelle HttpContext-Objekt anhängen
Context.User = Principal;
}
protected void Application_Error(Object sender, EventArgs e) {
Response.Write("Fehler aufgetreten.");
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html