Canalización de procesamiento de solicitudes integrada de IIS: modificar solicitud

StackOverflow https://stackoverflow.com/questions/60672

  •  09-06-2019
  •  | 
  •  

Pregunta

Quiero implementar una función similar a un filtro ISAPI usando HttpModule en IIS7 ejecutándose en el modo Canalización de procesamiento de solicitudes integradas de IIS.

El objetivo es observar la solicitud entrante en el nivel del servidor web e inyectar algunos HttpHeaders personalizados en la solicitud. (for ex: HTTP\_EAUTH\_ID)

Y más adelante en el ciclo de vida de una página ASPX, debería poder usar esa variable como

string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();

Entonces, al implementar este módulo en el nivel del servidor web, ¿es posible modificar la colección ServerVariables?

¿Fue útil?

Solución

HttpRequest.Variables del servidor La propiedad es una colección de solo lectura.Por lo tanto, no puedes modificar eso directamente.Sugeriría almacenar sus datos personalizados en contexto http (u objeto de aplicación global o su base de datos) desde su módulo http y luego leyendo ese valor compartido en la página aspx.

Si aún desea modificar las variables del servidor, hay una técnica de pirateo mencionada en este hilo utilizando la reflexión.

Otros consejos

Creo que la lista de variables del servidor solo contiene los encabezados enviados desde el navegador al servidor.

No podrás modificar ni el HttpRequest.Headers o el HttpRequest.ServerVariables recopilación.Sin embargo, podrá agregar su información a cualquiera de:

HttpContext.Current.Items
HttpContext.Current.Response.Headers

Desafortunadamente, Request.Params, Request.QueryString, Request.Cookies, Request.Form (y casi cualquier otro lugar en el que se te ocurra rellenarlo es de solo lectura.

Recomiendo encarecidamente no utilizar la reflexión si se trata de un HttpModule que planea instalar en IIS 7..Dado que este código se solicitará (potencialmente) para cada solicitud que pase por el servidor web, tendrá que ser muy rápido y la reflexión no será suficiente (a menos que tenga muy pocos usuarios).

¡Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top