Как манипулировать заголовком и затем продолжить его работу на С#?

StackOverflow https://stackoverflow.com/questions/2477486

Вопрос


Я хочу заменить старый фильтр ISAPI, работавший в 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;
}

Теперь я хочу переписать этот фильтр 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