Интегрированный конвейер обработки запросов IIS — изменение запроса

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

  •  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..Учитывая, что этот код будет вызываться (потенциально) для каждого запроса, проходящего через веб-сервер, он должен быть очень быстрым, и отражение просто не сможет его сократить (если только у вас не очень мало пользователей).

Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top