ASP.NET moduły HTTP i programy obsługi HTTP
W tym artykule przedstawiono moduły protokołu HTTP (Hypertext Transfer Protocol) ASP.NET i programy obsługi HTTP.
Oryginalna wersja produktu: ASP.NET
Oryginalny numer KB: 307985
Podsumowanie
Moduły HTTP i programy obsługi HTTP są integralną częścią architektury ASP.NET. Podczas przetwarzania żądania każde żądanie jest przetwarzane przez wiele modułów HTTP (na przykład moduł uwierzytelniania i moduł sesji), a następnie jest przetwarzane przez jedną procedurę obsługi HTTP. Po przetworzeniu żądania przez program obsługi żądanie przepływa z powrotem przez moduły HTTP.
Omówienie modułów HTTP
Moduły są wywoływane przed wykonaniem programu obsługi i po nim. Moduły umożliwiają deweloperom przechwytywanie, uczestnictwo lub modyfikowanie poszczególnych żądań. Moduły implementują IHttpModule
interfejs, który znajduje się w System.Web
przestrzeni nazw.
Dostępne zdarzenia, z którymi moduły HTTP mogą synchronizować
Klasa HttpApplication
udostępnia szereg zdarzeń, z którymi moduły mogą się synchronizować. Następujące zdarzenia są dostępne dla modułów do synchronizacji z każdym żądaniem. Te zdarzenia są wymienione w kolejności sekwencyjnej:
BeginRequest
: Żądanie zostało uruchomione. Jeśli musisz coś zrobić na początku żądania (na przykład wyświetlać banery reklamowe w górnej części każdej strony), zsynchronizuj to zdarzenie.AuthenticateRequest
: Jeśli chcesz podłączyć własny niestandardowy schemat uwierzytelniania (na przykład wyszukać użytkownika w bazie danych w celu zweryfikowania hasła), skompiluj moduł, który synchronizuje to zdarzenie i uwierzytelnia użytkownika w jaki sposób chcesz.AuthorizeRequest
: To zdarzenie jest używane wewnętrznie do implementowania mechanizmów autoryzacji (na przykład do przechowywania list kontroli dostępu (ACL) w bazie danych, a nie w systemie plików. Mimo że można zastąpić to zdarzenie, nie ma wielu dobrych powodów, aby to zrobić.ResolveRequestCache
: To zdarzenie określa, czy strona może być obsługiwana z pamięci podręcznej Danych wyjściowych. Jeśli chcesz napisać własny moduł buforowania (na przykład skompilować pamięć podręczną opartą na plikach, a nie pamięć podręczną), zsynchronizuj to zdarzenie, aby określić, czy strona ma być obsługiwana z pamięci podręcznej.AcquireRequestState
: stan sesji jest pobierany z magazynu stanów. Jeśli chcesz utworzyć własny moduł zarządzania stanem, zsynchronizuj to zdarzenie, aby pobrać stan sesji z magazynu stanów.PreRequestHandlerExecute
: to zdarzenie występuje przed wykonaniem programu obsługi HTTP.PostRequestHandlerExecute
: to zdarzenie występuje po wykonaniu programu obsługi HTTP.ReleaseRequestState
: stan sesji jest przechowywany z powrotem w magazynie stanów. Jeśli tworzysz niestandardowy moduł stanu sesji, musisz przechowywać stan z powrotem w magazynie stanów.UpdateRequestCache
: to zdarzenie zapisuje dane wyjściowe z powrotem w pamięci podręcznej Danych wyjściowych. Jeśli tworzysz niestandardowy moduł pamięci podręcznej, zapisujesz dane wyjściowe z powrotem w pamięci podręcznej.EndRequest
: Żądanie zostało ukończone. Możesz utworzyć moduł debugowania, który zbiera informacje w całym żądaniu, a następnie zapisuje informacje na stronie.
Następujące zdarzenia są dostępne dla modułów do synchronizacji z każdym przesyłaniem żądań. Kolejność tych zdarzeń jest niedeterministyczna.
PreSendRequestHeaders
: to zdarzenie występuje przed wysłaniem nagłówków. Jeśli chcesz dodać dodatkowe nagłówki, możesz zsynchronizować to zdarzenie z modułu niestandardowego.PreSendRequestContent
: to zdarzenie występuje, gdy metoda jest wywoływanaResponse.Flush
. Jeśli chcesz dodać dodatkową zawartość, możesz zsynchronizować to zdarzenie z modułu niestandardowego.Error
: To zdarzenie występuje, gdy wystąpi nieobsługiwany wyjątek. Jeśli chcesz napisać niestandardowy moduł obsługi błędów, zsynchronizuj to zdarzenie.
Konfigurowanie modułów HTTP
Procedura <httpModules>
obsługi sekcji konfiguracji jest odpowiedzialna za konfigurowanie modułów HTTP w aplikacji. Można go zadeklarować na poziomie komputera, lokacji lub aplikacji. Użyj następującej składni programu <httpModules>
obsługi sekcji:
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
Tworzenie modułów HTTP
Aby utworzyć moduł HTTP, należy zaimplementować IHttpModule
interfejs. Interfejs IHttpModule
ma dwie metody z następującymi podpisami:
void Init(HttpApplication);
void Dispose();
Omówienie procedur obsługi HTTP
Programy obsługi służą do przetwarzania poszczególnych żądań punktów końcowych. Programy obsługi umożliwiają platformie ASP.NET przetwarzanie poszczególnych adresów URL http lub grup rozszerzeń adresów URL w aplikacji. W przeciwieństwie do modułów tylko jeden program obsługi jest używany do przetwarzania żądania. Wszystkie programy obsługi implementują IHttpHandler
interfejs, który znajduje się w obiekcie System.Web namespace
. Programy obsługi są podobne do rozszerzeń internetowego interfejsu programowania aplikacji (ISAPI).
Konfigurowanie programów obsługi HTTP
Procedura <httpHandlers>
obsługi sekcji konfiguracji jest odpowiedzialna za mapowanie przychodzących adresów URL do IHttpHandler
klasy lub IHttpHandlerFactory
. Można go zadeklarować na poziomie komputera, lokacji lub aplikacji. Podkatalogi dziedziczą te ustawienia.
Administratorzy używają dyrektywy tagu <add>
, aby skonfigurować sekcję <httpHandlers>
. <Add>
dyrektywy są interpretowane i przetwarzane w kolejności sekwencyjnej od góry do dołu. Użyj następującej składni programu <httpHandler>
obsługi sekcji:
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
Tworzenie procedur obsługi HTTP
Aby utworzyć procedurę obsługi HTTP, należy zaimplementować IHttpHandler
interfejs. Interfejs IHttpHandler
ma jedną metodę i jedną właściwość z następującymi podpisami:
void ProcessRequest(HttpContext);
bool IsReusable {get;}
Uwaga 16.
Jeśli stan sesji jest wymagany w programie obsługi HTTP, należy również zaimplementować IRequiresSessionState
interfejs.