Pipeline de traitement des demandes intégré IIS – Modifier la demande
-
09-06-2019 - |
Question
Je souhaite implémenter une fonctionnalité de type filtre ISAPI à l'aide de HttpModule dans IIS7 exécuté en mode Pipeline de traitement de demande intégré IIS.
L'objectif est d'examiner la requête entrante au niveau du serveur Web et d'injecter des HttpHeaders personnalisés dans la requête. (for ex: HTTP\_EAUTH\_ID)
Et plus tard dans le cycle de vie d'une page ASPX, je devrais pouvoir utiliser cette variable comme
string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();
Donc en implémentant ce module au niveau du serveur Web, est-il possible de modifier la collection ServerVariables ??
La solution
HttpRequest.ServerVariables La propriété est une collection en lecture seule.Vous ne pouvez donc pas modifier cela directement.Je suggérerais de stocker vos données personnalisées dans httpcontexte (ou un objet d'application global ou votre base de données) à partir de votre module http, puis en lisant cette valeur partagée dans la page aspx.
Si vous souhaitez toujours modifier les variables du serveur, il existe une technique de hack mentionnée dans ce document. fil en utilisant la réflexion.
Autres conseils
Je pense que la liste des variables du serveur ne contient que les en-têtes envoyés du navigateur au serveur.
Vous ne pourrez pas modifier non plus le HttpRequest.Headers
ou la HttpRequest.ServerVariables
collection.Vous pourrez cependant joindre vos informations à l’un des :
HttpContext.Current.Items
HttpContext.Current.Response.Headers
Malheureusement, Request.Params, Request.QueryString, Request.Cookies, Request.Form
(et presque tout autre endroit où vous penseriez le mettre en lecture seule.
Je vous déconseille fortement d'utiliser la réflexion s'il s'agit d'un module Http que vous envisagez d'installer dans IIS 7..Étant donné que ce code sera appelé (potentiellement) pour chaque requête transitant par le serveur Web, il devra être très rapide et la réflexion ne suffira pas (sauf si vous avez très peu d'utilisateurs).
Bonne chance!