ASP.NET módulos HTTP y controladores HTTP

En este artículo se presentan los módulos ASP.NET protocolo de transferencia de hipertexto (HTTP) y los controladores HTTP.

              Versión original del producto: ASP.NET
Número de KB original: 307985

Resumen

Los módulos HTTP y los controladores HTTP forman parte integral de la arquitectura de ASP.NET. Mientras se procesa una solicitud, cada solicitud se procesa mediante varios módulos HTTP (por ejemplo, el módulo de autenticación y el módulo de sesión) y, a continuación, se procesa mediante un único controlador HTTP. Una vez que el controlador ha procesado la solicitud, la solicitud vuelve a fluir a través de los módulos HTTP.

Introducción a los módulos HTTP

Se llama a los módulos antes y después de que se ejecute el controlador. Los módulos permiten a los desarrolladores interceptar, participar o modificar cada solicitud individual. Los módulos implementan la IHttpModule interfaz, que se encuentra en el espacio de System.Web nombres.

Eventos disponibles con los que los módulos HTTP pueden sincronizar

Una HttpApplication clase proporciona una serie de eventos con los que los módulos pueden sincronizarse. Los siguientes eventos están disponibles para que los módulos se sincronicen con en cada solicitud. Estos eventos se enumeran en orden secuencial:

  • BeginRequest: se ha iniciado la solicitud. Si necesita hacer algo al principio de una solicitud (por ejemplo, mostrar banners de anuncios en la parte superior de cada página), sincronice este evento.

  • AuthenticateRequest: si desea conectar su propio esquema de autenticación personalizado (por ejemplo, busque un usuario en una base de datos para validar la contraseña), cree un módulo que sincronice este evento y autentique al usuario como quiera.

  • AuthorizeRequest: este evento se usa internamente para implementar mecanismos de autorización (por ejemplo, para almacenar las listas de control de acceso (ACL) en una base de datos en lugar de en el sistema de archivos). Aunque puede invalidar este evento, no hay muchas buenas razones para hacerlo.

  • ResolveRequestCache: este evento determina si se puede servir una página desde la memoria caché de salida. Si desea escribir su propio módulo de almacenamiento en caché (por ejemplo, compilar una caché basada en archivos en lugar de una caché de memoria), sincronice este evento para determinar si se va a servir la página desde la memoria caché.

  • AcquireRequestState: el estado de sesión se recupera del almacén de estado. Si desea compilar su propio módulo de administración de estado, sincronice este evento para obtener el estado de sesión del almacén de estado.

  • PreRequestHandlerExecute: este evento se produce antes de que se ejecute el controlador HTTP.

  • PostRequestHandlerExecute: este evento se produce después de ejecutar el controlador HTTP.

  • ReleaseRequestState: el estado de la sesión se almacena de nuevo en el almacén de estado. Si va a compilar un módulo de estado de sesión personalizado, debe almacenar el estado de nuevo en el almacén de estado.

  • UpdateRequestCache: este evento vuelve a escribir la salida en la memoria caché de salida. Si va a compilar un módulo de caché personalizado, vuelva a escribir la salida en la memoria caché.

  • EndRequest: se ha completado la solicitud. Es posible que desee compilar un módulo de depuración que recopile información a lo largo de la solicitud y, a continuación, escriba la información en la página.

Los siguientes eventos están disponibles para que los módulos se sincronicen con para cada transmisión de solicitud. El orden de estos eventos no es determinista.

  • PreSendRequestHeaders: este evento se produce antes de que se envíen los encabezados. Si desea agregar encabezados adicionales, puede sincronizar este evento desde un módulo personalizado.

  • PreSendRequestContent: este evento se produce cuando se llama al Response.Flush método . Si desea agregar contenido adicional, puede sincronizar este evento desde un módulo personalizado.

  • Error: este evento se produce cuando se produce una excepción no controlada. Si desea escribir un módulo de controlador de errores personalizado, sincronice este evento.

Configuración de módulos HTTP

El <httpModules> controlador de sección de configuración es responsable de configurar los módulos HTTP dentro de una aplicación. Se puede declarar en el nivel de equipo, sitio o aplicación. Use la sintaxis siguiente para el controlador de <httpModules> sección:

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

Creación de módulos HTTP

Para crear un módulo HTTP, debe implementar la IHttpModule interfaz. La IHttpModule interfaz tiene dos métodos con las siguientes firmas:

void Init(HttpApplication);
void Dispose();

Introducción a los controladores HTTP

Los controladores se usan para procesar solicitudes de punto de conexión individuales. Los controladores permiten que el marco de ASP.NET procese direcciones URL HTTP individuales o grupos de extensiones de dirección URL dentro de una aplicación. A diferencia de los módulos, solo se usa un controlador para procesar una solicitud. Todos los controladores implementan la IHttpHandler interfaz , que se encuentra en .System.Web namespace Los controladores son análogos a las extensiones de la Interfaz de programación de aplicaciones de servidor de Internet (ISAPI).

Configuración de controladores HTTP

El <httpHandlers> controlador de sección de configuración es responsable de asignar direcciones URL entrantes a la IHttpHandler clase o IHttpHandlerFactory . Se puede declarar en el nivel de equipo, sitio o aplicación. Los subdirectorios heredan esta configuración.

Los administradores usan la <add> directiva tag para configurar la <httpHandlers> sección. <Add> las directivas se interpretan y procesan en un orden secuencial descendente. Use la sintaxis siguiente para el controlador de <httpHandler> sección:

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

Creación de controladores HTTP

Para crear un controlador HTTP, debe implementar la IHttpHandler interfaz . La IHttpHandler interfaz tiene un método y una propiedad con las siguientes firmas:

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

Nota:

Si el estado de sesión es necesario en el controlador HTTP, también debe implementar la IRequiresSessionState interfaz.