質問

私はIIS6で実行されたことを古いISAPIフィルタを交換したい
。このフィルタチェック要求は特別な種類のものである場合、ヘッダを操作し、要求に続きます。 2つのヘッダは、私は別の特別な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フィルタを書き換えたいです。

:だから私はこのようなものを持っています
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が必要とする要求に2つのヘッダを追加します。 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