点击我要替换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;
}

那么,有没有办法再次发送我的操作方面?

有帮助吗?

解决方案

我终于找到了。正如我在评论中说我添加两个标头是由我的DLL,它最终处理请求所需的请求。该url头包含路径DLL。所以,我必须做一个重定向到该DLL。 结果,这是通过下面的代码来完成:

private void OnMapRequestHandler(HttpContext context)
{
    ManipulateHeaderInSomeWay(context);
    string url = context.Request.Header["url"]; // path of the DLL

    // now this is the important call!
    context.Server.TransferRequest(url, true);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top