Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Alle öffentlichen Ereignisse, die von der HttpApplication-Klasse ausgelöst werden, werden unter Verwendung der Syntax Anwendung_Ereignisname unterstützt. Beispielsweise kann der Handler für das Error-Ereignis als protected void Application_Error(Object sender, EventArgs e) deklariert werden. Darüber hinaus werden auch asynchrone Ereignisse unterstützt.
Es gibt drei Kategorien öffentlicher Ereignisse: Anwendungsereignisse, die durch HttpApplication ausgelöst werden, Modulereignisse, die durch ein HttpModule ausgelöst werden, und asynchrone Ereignisse, die durch HTTPApplication ausgelöst werden.
Anwendungsereignisse
Die folgenden Tabellen enthalten die Ereignisse, die während der Lebensdauer einer Anwendung durch HttpApplication ausgelöst werden. Die erste Tabelle enthält die Ereignisse, die vor der Ausführung der Anwendung ausgelöst werden. Die Ereignisse sind in der Reihenfolge ihres Auftretens aufgelistet.
| Ereignis | Beschreibung |
|---|---|
| BeginRequest | Signalisiert eine neue Anforderung; wird in jedem Fall bei jeder Anforderung ausgelöst. |
| AuthenticateRequest | Signalisiert, dass die Anforderung für die Authentifizierung bereit ist; wird vom Sicherheitsmodul verwendet. |
| AuthorizeRequest | Signalisiert, dass die Anforderung für die Autorisierung bereit ist; wird vom Sicherheitsmodul verwendet. |
| ResolveRequestCache | Wird vom Ausgabecachemodul verwendet, um die Verarbeitung von zwischengespeicherten Anforderungen kurzzuschließen. |
| AcquireRequestState | Signalisiert, dass der Status der aktuellen Anforderung angezeigt werden soll. |
| PreRequestHandlerExecute | Signalisiert, dass der Anforderungshandler zur Ausführung bereit ist. Dies ist das letzte Ereignis, an dem Sie beteiligt sein können, bevor der HttpHandler für diese Anforderung aufgerufen wird. |
Die nächste Tabelle enthält die Ereignisse, die ausgelöst werden, nachdem die Anwendung beendet wurde. Die Ereignisse sind in der Reihenfolge ihres Auftretens aufgelistet.
| Ereignis | Beschreibung |
|---|---|
| PostRequestHandlerExecute | Signalisiert, dass der HttpHandler die Verarbeitung der Anforderung abgeschlossen hat. |
| ReleaseRequestState | Signalisiert, dass der Anforderungsstatus gespeichert werden sollte, weil die Anwendung mit der Anforderung beendet wird. |
| UpdateRequestCache | Signalisiert, dass die Codeverarbeitung abgeschlossen wurde und die Datei dem ASP.NET-Cache hinzugefügt werden kann. |
| EndRequest | Signalisiert, dass die gesamte Verarbeitung für die Anforderung abgeschlossen ist. Dies ist das letzte Ereignis, das aufgerufen wird, wenn die Anwendung beendet wird. |
Außerdem gibt es drei Ereignisse, die auf Anforderung in einer nicht deterministischen Reihenfolge ausgelöst werden können. Diese sind in der folgenden Tabelle aufgelistet.
| Ereignis | Beschreibung |
|---|---|
| PreSendRequestHeaders | Signalisiert, dass HTTP-Header zum Senden an den Client bereit sind. Hier besteht die Möglichkeit, Header hinzuzufügen, zu entfernen oder zu ändern, bevor sie versendet werden. |
| PreSendRequestContent | Signalisiert, dass der Inhalt zum Senden an den Client bereit ist. Hier besteht die Möglichkeit, den Inhalt zu ändern, bevor er versendet wird. |
| Error | Signalisiert eine nicht behandelte Ausnahme. |
Modulereignisse
Sie können eine Verbindung zu (Verknüpfung mit) Ereignissen herstellen, die von den in einer Konfiguration definierten HttpModules veröffentlicht werden. Machine.config deklariert beispielsweise die folgenden Standardmodule für alle Anwendungen.
<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule, .../>
<add name="Session" type="System.Web.SessionState.SessionStateModule, .../>
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule, .../>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule .../>
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule .../>
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule, .../>
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule, .../>
</httpModules>
Suchen Sie in allen diesen Klassen nach den öffentlichen Ereignissen, die sie definieren. Sie können für diese in der Datei Global.asax mit Hilfe der Syntax Modulename**_On**EventName eine Verknüpfung herstellen. Beispielsweise wird das Start-Ereignis des SessionStateModule-Moduls als protected void Session_Start(Object sender, EventArgs e) in Global.asax deklariert. Sie können die Syntax Session_OnStart in einem <script runat=server>-Block in einer ASP.NET-Anwendungsdatei verwenden, um einen Ereignishandler für das Start-Ereignis des SessionStateModule folgendermaßen zu definieren.
<script language="VB" runat="server">
Sub Session_OnStart()
' Session startup code goes here.
End Sub
</script>
Hinweis Sie können einfach dieselbe Syntax Modulename**_On**EventName zum Verknüpfen von Ereignissen in benutzerdefinierten Modulen verwenden, sofern sie in der Konfigurationsdatei der Anwendung deklariert sind.
Asynchrone Ereignisse
Ereignishandler für asynchrone Ereignisse in HttpApplication müssen explizit verbunden werden, indem die AddAsynchronousEventName-Methode in der Datei Global.asax aufgerufen wird. Ein asynchroner Ereignishandler für das OnPostRequestHandlerExecuteAsync-Ereignis wird beispielsweise für das Ereignis registriert, indem die Methode AddOnPostRequestHandlerExecuteAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler) aufgerufen wird. Die kurze Syntax Application**_On**EventName ist nur für synchrone Ereignisse vorgesehen. Deklarationen für asynchrone HttpApplication-Ereignisse sehen wie folgt aus:
void OnAcquireRequestStateAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnAuthenticateRequestAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnAuthorizeRequestAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnBeginRequestAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnEndRequestAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnPostRequestHandlerExecuteAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnPreRequestHandlerExecuteAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnReleaseRequestStateAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnResolveRequestCacheAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
void OnUpdateREquestCacheAsync(System.Web.BeginEventHandler, System.Web.EndEventHandler)
Der folgende Codeblock ist ein Beispiel für einen Codeblock, der in die Datei Global.asax eingefügt werden kann, um einen asynchronen Handler für das OnPostRequestHandlerExecuteAsync-Ereignis zu erstellen.
<%@ language=c# %>
<%@ import namespace="System.Threading" %>
<script runat=server>
public override void Init() {
// Connect the asynchronous event PreRequestHandlerExecuteAsync.
AddOnPreRequestHandlerExecuteAsync(
new BeginEventHandler(this.BeginPreHandlerExecute),
new EndEventHandler(this.EndPreHandlerExecute));
}
IAsyncResult BeginPreHandlerExecute(Object source, EventArgs e, AsyncCallback cb, Object extraData) {
AsynchOperation asynch = new AsynchOperation(cb, Context, extraData);
asynch.StartAsyncWork();
return asynch;
}
void EndPreHandlerExecute(IAsyncResult ar) {
}
class AsynchOperation : IAsyncResult {
private bool _completed;
private Object _state;
private AsyncCallback _callback;
private HttpContext _context;
bool IAsyncResult.IsCompleted { get { return _completed; } }
WaitHandle IAsyncResult.AsyncWaitHandle { get { return null; } }
Object IAsyncResult.AsyncState { get { return _state; } }
bool IAsyncResult.CompletedSynchronously { get { return false; } }
public AsynchOperation(AsyncCallback callback, HttpContext context, Object state) {
_callback = callback;
_context = context;
_state = state;
_completed = false;
}
public void StartAsyncWork() {
ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomething), null /*workItemState*/);
}
private void DoSomething(Object workItemState) {
_context.Items["PreHandlerExecute"] = "Hello World from Async PreHandleExecute!";
_completed = true;
_callback(this);
}
}
</script>
Siehe auch
HTTP-Laufzeitunterstützung | HttpModules | Beispiel für ein benutzerdefiniertes HttpModule | Behandeln und Auslösen von Ereignissen