Udostępnij za pośrednictwem


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ływana Response.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.