我想替换在 IIS6 上运行的旧 ISAPI 过滤器。此过滤器检查请求是否属于特殊类型,然后操作标头并继续请求。在调用另一个特殊 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;
}
我现在想将此 ISAPI 过滤器重写为 IIS7 的托管模块。所以我有这样的事情:
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;
}
那么有没有办法再次发送我操纵的上下文?