ASP.NET módulos HTTP y controladores HTTP

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

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

Resumen

Los módulos HTTP y los controladores HTTP son una parte integral de la arquitectura ASP.NET web. 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. Después de que el controlador haya procesado la solicitud, la solicitud fluye de nuevo 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 programadores interceptar, participar o modificar cada solicitud individual. Los módulos IHttpModule implementan la interfaz, que se encuentra en el espacio de System.Web nombres.

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

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 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, buscar 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 desea.

  • 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 razones buenas para hacerlo.

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

  • AcquireRequestState: el estado de la sesión se recupera del almacén de estado. Si desea crear 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 está creando un módulo de estado de sesión personalizado, debe volver a almacenar el estado en el almacén de estado.

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

  • EndRequest: la solicitud se ha completado. Es posible que desee crear 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 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 Response.Flush al 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.

Configurar 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 equipo, el sitio o la aplicación. Use la siguiente sintaxis para el <httpModules> controlador de secciones:

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

Crear módulos HTTP

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

void Init(HttpApplication);
void Dispose();

Introducción a los controladores HTTP

Los controladores se usan para procesar solicitudes de extremo individuales. Los controladores permiten al marco ASP.NET para procesar 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 el archivo . Los controladores son análogos a las extensiones de la Interfaz de programación de aplicaciones (ISAPI) de Internet Server.

Configurar controladores HTTP

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

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

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

Crear controladores HTTP

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

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.