Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 20191|Respuesta: 0

[ASP.NET] Asp.Net introducción de IHttpHandler

[Copiar enlace]
Publicado en 13/3/2018 21:40:17 | | | |
Asp.Net introducción de IHttpHandler
ASP.NET dos interfaces de procesamiento más utilizadas al responder a solicitudes HTTP son IHttpHandler e IHttpModule.

En general, IHttpHandler se utiliza para gestionar un tipo específico de solicitud, como el procesamiento separado de cada archivo *.asp, *.aspx. IHttpModule se utiliza habitualmente para gestionar operaciones que son comúnmente requeridas para la solicitud, como realizar algunas de las mismas comprobaciones en la página de la solicitud.

Veamos los pasos de procesamiento del servidor IIS al realizar la solicitud HTTP correspondiente. ASP.NET tiene el concepto de pipeline, lo que significa que cada petición ASP.NET tendrá una serie de operaciones correspondientes en IIS para formar una secuencia tipo línea.

ASP.NET introducción a la tubería

Veamos el diagrama de tiempos de procesamiento de la canalización:




Como se puede ver en la figura, tras la llegada de la solicitud, la implementación es procesada por HttpModule y luego se llama al método ProcessRequest() de HttpHandler para realizar la respuesta específica. Por lo tanto, no es difícil entender por qué el manejo de solicitudes específicas de clase se coloca en la clase HttpHandler mientras se realizan algunas comprobaciones que son comunes a todas las solicitudes en el HttpModule.

Práctica de código
IHttpHandler

El autor se topó recientemente con el uso de IHttpHandler para gestionar llamadas a la interfaz del cliente en el proyecto, así que hablemos brevemente del diseño sencillo de la interfaz basado en IHttpHandler.

La interfaz IHttpHandler tiene solo dos miembros:


El atributo IsReusable identifica si el objeto HttpHandler puede ser utilizado por otras instancias, y normalmente lo ponemos en True. El método ProcesRequest() es una respuesta específica a la petición, y solo necesitamos poner aquí la operación específica de lógica de negocio.

Primero, crea un nuevo proyecto web y añade una clase Handler:

La clase RayHandler implementa la función ProcesRequest() de la interfaz IHttpHandler, que es simplemente una salida directa de un fragmento de texto.

Luego necesitamos añadir la siguiente configuración en el archivo Web.config:


path indica la coincidencia de URLs, como *.ray, que significa que el Handler responderá a las solicitudes de URL que terminan en ".ray", verbo indica el método de solicitud, como Get/Post, y * significa que coincide con todas. type indica el tipo de clase Handler, WebApplication2. RayHandler es el nombre de la clase, WebApplication2 se refiere al nombre del ensamblador en el directorio Bin, por ejemplo, el nombre del ensamblador en el ejemplo es WebApplication2.dll, y no es necesario definir un nombre de sufijo aquí.

Inicia el sitio, introduce la URL que termina en ".ray" y puedes ver el siguiente resultado:



Resumen de IHttpHandlerFactory

A veces puede que necesitemos manejar varios sufijos diferentes, uno de ellos corresponde a una clase Handler, y así es como se ve nuestro archivo Web.config:


Si tenemos muchas clases de implementación de HttpHandler, entonces nuestra configuración de archivos Web.config seguro que se ve muy extensa. O en algunos casos, cuando solo podemos determinar qué Handler responde cuando el programa está en ejecución, necesitamos usar IHttpHandlerFactory.

IHttpHandlerFactory se define de la siguiente manera:


Entre ellos:

GetHandler(): Devuelve una instancia que implementa la interfaz IHttpHandler;
ReleaseHandler(): Permite a Factory reutilizar una instancia Handler existente.
Tomemos como ejemplo las solicitudes ray y rss anteriores, implementamos la clase Factory:

En este caso, la configuración en Web.config es la siguiente:


En este momento, se implementa la función de usar la clase Factory para corresponder a diferentes manejadores específicos, simplificando la configuración.

Escalable IHttpHandlerFactory

En la implementación anterior, si el programa necesita añadir un nuevo método de manejo de sufijos en el futuro, debe modificar la instrucción Switch en GetHandler(), lo que también puede causar errores o traer otros riesgos de seguridad. Entonces, ¿es posible mantener la clase HandlerFactory sin cambios para extensiones posteriores?

La respuesta es definitivamente sí. Los lectores que estén familiarizados con el patrón de diseño deben entender que se trata de un patrón de fábrica simple, y para lograr las funciones anteriores, podemos usar el modo de diseño llamado puntos avanzados.

Y aquí, también podemos usar la característica del lenguaje C#: la reflexión. A través del mecanismo de reflexión de C#, reflejamos el tipo de Hanlder correspondiente según el sufijo de la URL, siempre que coincidamos en la correspondencia entre el nombre del sufijo de la URL y el nombre de clase del Manejador.

Por ejemplo, reescribimos GetHandler() de la siguiente manera:

En este caso, solo necesitas poner la clase Handler en el método bajo el mismo espacio de nombres que la clase HandlerFactory y configurarla correctamente en Web.config. Por ejemplo, si existe una clase RayHandler, entonces se debe añadir la siguiente configuración para coincidir automáticamente:



resumen
Este artículo introduce brevemente el uso de IHttpHandler en ASP.NET, proporciona la implementación de IHttpHandlerFactory en el procesamiento de múltiples solicitudes Handler y, finalmente, mejora una implementación escalable de múltiples solicitudes de Handler usando el mecanismo de reflexión de C#.





Anterior:asp.net Significado explicativo de HttpContext
Próximo:asp.net interfaz de IHttpModule se explica en detalle
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com