Compartilhar via


Módulos e manipuladores de HTTP do ASP.NET

Este artigo apresenta os módulos ASP.NET HTTP e os manipuladores HTTP.

Versão original do produto: ASP.NET
Número original do KB: 307985

Resumo

Módulos e manipuladores de HTTP são parte integrante da arquitetura do ASP.NET. Enquanto uma solicitação está sendo processada, cada solicitação é processada por vários módulos de HTTP (por exemplo, o módulo de autenticação e o módulo de sessão) e, em seguida, é processada por um único manipulador de HTTP. Depois que o manipulador processa a solicitação, a solicitação retorna pelos módulos de HTTP.

Visão geral dos módulos HTTP

Os módulos são chamados antes e depois da execução do manipulador. Os módulos permitem que os desenvolvedores interceptem, participem ou modifiquem cada solicitação individual. Os módulos implementam a IHttpModule interface, que está localizada no System.Web namespace.

Eventos disponíveis com os quais os módulos HTTP podem sincronizar

Uma HttpApplication classe fornece vários eventos com os quais os módulos podem ser sincronizados. Os eventos a seguir estão disponíveis para os módulos sincronizarem em cada solicitação. Esses eventos estão listados em ordem sequencial:

  • BeginRequest: A solicitação foi iniciada. Se você precisar fazer algo no início de uma solicitação (por exemplo, exibir banners de anúncios na parte superior de cada página), sincronize esse evento.

  • AuthenticateRequest: se você quiser conectar seu próprio esquema de autenticação personalizado (por exemplo, procurar um usuário em um banco de dados para validar a senha), crie um módulo que sincronize esse evento e autentique o usuário como você deseja.

  • AuthorizeRequest: esse evento é usado internamente para implementar mecanismos de autorização (por exemplo, para armazenar suas listas de controle de acesso (ACLs) em um banco de dados em vez de no sistema de arquivos). Embora você possa substituir esse evento, não há muitos bons motivos para fazê-lo.

  • ResolveRequestCache: esse evento determina se uma página pode ser atendida do cache de saída. Se você quiser escrever seu próprio módulo de cache (por exemplo, criar um cache baseado em arquivo em vez de um cache de memória), sincronize esse evento para determinar se a página deve ser veiculada no cache.

  • AcquireRequestState: O estado da sessão é recuperado do repositório de estado. Se você quiser criar seu próprio módulo de gerenciamento de estado, sincronize esse evento para obter o estado da sessão do repositório de estado.

  • PreRequestHandlerExecute: Esse evento ocorre antes que o manipulador HTTP seja executado.

  • PostRequestHandlerExecute: Esse evento ocorre depois que o manipulador HTTP é executado.

  • ReleaseRequestState: O estado da sessão é armazenado de volta no repositório de estado. Se você estiver criando um módulo de estado de sessão personalizado, deverá armazenar seu estado de volta no repositório de estado.

  • UpdateRequestCache: esse evento grava a saída de volta no cache de saída. Se você estiver criando um módulo de cache personalizado, gravará a saída de volta no cache.

  • EndRequest: A solicitação foi concluída. Talvez você queira criar um módulo de depuração que reúna informações em toda a solicitação e, em seguida, grave as informações na página.

Os eventos a seguir estão disponíveis para os módulos sincronizarem para cada transmissão de solicitação. A ordem desses eventos não é determinística.

  • PreSendRequestHeaders: esse evento ocorre antes que os cabeçalhos sejam enviados. Se você quiser adicionar cabeçalhos adicionais, poderá sincronizar esse evento a partir de um módulo personalizado.

  • PreSendRequestContent: Esse evento ocorre quando o Response.Flush método é chamado. Se você quiser adicionar conteúdo adicional, poderá sincronizar esse evento a partir de um módulo personalizado.

  • Error: esse evento ocorre quando ocorre uma exceção sem tratamento. Se você quiser escrever um módulo de manipulador de erros personalizado, sincronize esse evento.

Configurar módulos HTTP

O <httpModules> manipulador da seção de configuração é responsável por configurar os módulos HTTP em um aplicativo. Ele pode ser declarado no nível do computador, site ou aplicativo. Use a seguinte sintaxe para o manipulador de <httpModules> seção:

<httpModules>
    <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <clear />
</httpModules>

Criar módulos HTTP

Para criar um módulo HTTP, você deve implementar a IHttpModule interface. A IHttpModule interface tem dois métodos com as seguintes assinaturas:

void Init(HttpApplication);
void Dispose();

Visão geral dos manipuladores HTTP

Os manipuladores são usados para processar solicitações de ponto de extremidade individuais. Os manipuladores permitem que a estrutura ASP.NET processe URLs HTTP individuais ou grupos de extensões de URL em um aplicativo. Ao contrário dos módulos, apenas um manipulador é usado para processar uma solicitação. Todos os manipuladores implementam a IHttpHandler interface, que está localizada no System.Web namespace. Os manipuladores são análogos às extensões ISAPI (Internet Server Application Programming Interface).

Configurar manipuladores HTTP

O <httpHandlers> manipulador da seção de configuração é responsável por mapear URLs de entrada para a IHttpHandler classe or IHttpHandlerFactory . Ele pode ser declarado no nível do computador, site ou aplicativo. Os subdiretórios herdam essas configurações.

Os administradores usam a <add> diretiva de marca para configurar a <httpHandlers> seção. <Add> As diretivas são interpretadas e processadas em uma ordem sequencial de cima para baixo. Use a seguinte sintaxe para o manipulador de <httpHandler> seção:

<httpHandlers>
    <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
    <remove verb="[verb list]" path="[path/wildcard]" />
    <clear />
</httpHandlers>

Criar manipuladores HTTP

Para criar um manipulador HTTP, você deve implementar a IHttpHandler interface. A IHttpHandler interface tem um método e uma propriedade com as seguintes assinaturas:

void ProcessRequest(HttpContext);
bool IsReusable {get;}

Observação

Se o estado da sessão for necessário no manipulador HTTP, você também precisará implementar a IRequiresSessionState interface.