2008-09-13 8 views
0

Я хочу реализовать функцию фильтра, подобную ISAPI, с использованием HttpModule в IIS7, работающем в режиме IIS Integrated Request Processing Pipeline.IIS Integrated Request Processing Pipeline - Modify Request

Целью является просмотр входящего запроса на уровне веб-сервера и внедрение в запрос некоторых пользовательских HttpHeaders. (for ex: HTTP\_EAUTH\_ID)

А позже страницы жизненного цикла на странице ASPX, я должен быть в состоянии использовать эту переменную как

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

Так, реализующего этот модуль на уровне веб-сервера, можно изменить коллекцию ServerVariables ??

ответ

3

HttpRequest.ServerVariables Недвижимость - это только для чтения. Таким образом, вы не можете напрямую изменить это. Я бы предложил сохранить ваши пользовательские данные в httpcontext (или глобальный объект приложения или вашу базу данных) из вашего httpmodule и затем прочитать это общее значение на странице aspx.

Если вы все еще хотите изменить переменные сервера, в этом случае используется технология взлома, упомянутая в этом thread с использованием Reflection.

0

Я считаю, что список переменных сервера содержит только заголовки, отправленные из браузера на сервер.

0

Вы не сможете изменить ни HttpRequest.Headers, ни HttpRequest.ServerVariables. Однако вы сможете лавировать на вашу информацию на любой из:.

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

К сожалению, Request.Params, Request.QueryString, Request.Cookies, Request.Form (и почти любое другое место, можно подумать, что набивать его только для чтения

Я бы сильно советуем не использовать рефлексию, если это HttpModule, который вы планируете установить в IIS 7. Учитывая, что этот код будет вызван (потенциально) каждый запрос, который проходит через веб-сервер, он должен быть очень быстрым и отражать просто не собирается сокращать его (если у вас мало пользователей).

Удачи!