문제

IIS 통합 요청 처리 파이프라인 모드에서 실행되는 IIS7의 HttpModule을 사용하여 기능과 같은 ISAPI 필터를 구현하고 싶습니다.

목표는 웹 서버 수준에서 들어오는 요청을 살펴보고 일부 사용자 지정 HttpHeader를 요청에 삽입하는 것입니다. (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 (그리고 당신이 그것을 채우고 있다고 생각하는 거의 모든 곳은 읽기 전용입니다.

IIS 7에 설치하려는 HttpModule인 경우 리플렉션을 사용하지 않는 것이 좋습니다..이 코드가 웹 서버를 통과하는 모든 요청에 ​​대해 (잠재적으로) 호출된다는 점을 고려하면 매우 빨라야 하며 리플렉션만으로는 이를 줄일 수 없습니다(사용자가 거의 없는 경우).

행운을 빌어요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top