IIS6에서 실행되는 이전 ISAPI 필터를 바꾸고 싶습니다. 이 필터는 요청이 특별한 종류인지 확인한 다음 헤더를 조작하고 요청을 계속합니다. 다른 특별한 ISAPI 모듈을 호출 할 때 필요한 두 가지 헤더가 조작 방법에 추가되었습니다.헤더를 조작 한 다음 C#으로 헤더를 처리하는 방법?
DWORD OnPreProc(HTTP_FILTER_CONTEXT *pfc, HTTP_FILTER_PREPROC_HEADERS *pHeaders)
{
if (ManipulateHeaderInSomeWay(pfc, pHeaders))
{
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
return SF_STATUS_REQ_FINISHED;
}
내가 지금 IIS7에 대한 관리 모듈로이 ISAPI 필터를 다시 작성하려면 : 같은
그래서 내가 ISAPI C를 가지고 ++ 코드입니다. 그래서 저는 다음과 같은 것을 가지고 있습니다 :
private void OnMapRequestHandler(HttpContext context)
{
ManipulateHeaderInSomeWay(context);
}
이제 무엇을 할 수 있습니까? 요청이해야 할 일을하지 않는 것처럼 보입니다.
이미 동일한 방법을 구현하는 IIS7 기본 모듈을 작성했습니다. 그러나이 방법은 다음에 무엇을 해야할지를 알 수있는 반환 값을 가지고 있습니다.
REQUEST_NOTIFICATION_STATUS CMyModule::OnMapRequestHandler(IN IHttpContext *pHttpContext, OUT IMapHandlerProvider *pProvider)
{
if (DoSomething(pHttpContext))
{
return RQ_NOTIFICATION_CONTINUE;
}
return RQ_NOTIFICATION_FINISH_REQUEST;
}
다시 조작 된 컨텍스트를 다시 보낼 수있는 방법이 있습니까?
. 그 컬렉션의 값을 조작하고 나중에 ASP.Net 파이프 라인에서 계속하려고한다고 생각합니다. –
컬렉션의 값을 조작하지 않지만 "url"및 "ORIGINALURL"이라는 두 개의 추가 헤더를 컬렉션에 추가합니다. "url"헤더의 값은 내가 사용하는 DLL의 상대 경로를 가리키며 "ORIGINALURL"헤더는 원래 보낸 URL을 값으로 가져옵니다. –
요청에 대한 HttpHandler에 도달하면 해당 항목이 더 이상 존재하지 않습니까? 의도 한 기능은 무엇입니까? 일반적으로 "초기화"메서드의 IHttpModule을 "PostAuthorize"이벤트 (또는 적절하다고 생각되는 다른 이벤트)에 연결합니다. 이 기능은 ASP.Net 파이프 라인에서 필터로 실행되며 결국 HttpHandler에서 끝납니다. 당신에게 적합하지 않은 기능은 무엇입니까? 또는 귀하의 질문을 잘못 읽고 있습니까? (추가 된 헤더가 필요한 기능은 Request.Headers를 읽거나 HTTP 스트림에서 헤더를 읽는 것입니까? –