Интегрированный конвейер обработки запросов IIS — изменение запроса
-
09-06-2019 - |
Вопрос
Я хочу реализовать функцию, подобную фильтру ISAPI, с использованием HttpModule в IIS7, работающем в режиме конвейера интегрированной обработки запросов IIS.
Цель состоит в том, чтобы просмотреть входящий запрос на уровне веб-сервера и внедрить в него несколько пользовательских заголовков HttpHeaders. (for ex: HTTP\_EAUTH\_ID)
И позже в жизненном цикле страницы ASPX я смогу использовать эту переменную как
string eauthId = Request.ServerVariables["HTTP\_EAUTH\_ID"].ToString();
Итак, реализуя этот модуль на уровне веб-сервера, можно ли изменить коллекцию ServerVariables??
Решение
HttpRequest.ServerVariables Свойство — это коллекция, доступная только для чтения.Таким образом, вы не можете напрямую изменить это.Я бы предложил хранить ваши пользовательские данные в httpконтекст (или глобальный объект приложения, или вашу базу данных) из вашего http-модуля, а затем прочитайте это общее значение на странице aspx.
Если вы все еще хотите изменить переменные сервера, в этом разделе упомянута техника взлома. нить с помощью отражения.
Другие советы
Я считаю, что список переменных сервера содержит только заголовки, отправленные из браузера на сервер.
Вы не сможете изменить ни HttpRequest.Headers
или HttpRequest.ServerVariables
коллекция.Однако вы сможете прикрепить свою информацию к любому из:
HttpContext.Current.Items
HttpContext.Current.Response.Headers
К сожалению, Request.Params, Request.QueryString, Request.Cookies, Request.Form
(и почти любое другое место, где вы могли бы его разместить, доступно только для чтения.
Я бы настоятельно не советовал использовать отражение, если это HttpModule, который вы планируете установить в IIS 7..Учитывая, что этот код будет вызываться (потенциально) для каждого запроса, проходящего через веб-сервер, он должен быть очень быстрым, и отражение просто не сможет его сократить (если только у вас не очень мало пользователей).
Удачи!