Server.TransferRequest () и код состояния http

Мне пришлось реализовать собственный HttpModule для обработки ошибки 404 в Sharepoint.

Он прослушивает событие PreSendRequestContent и ищет код состояния 404. Если он найден, он выполняет TransferRequest.

void App_PreSendRequestContent(object sender, EventArgs e)
{
    HttpResponse res = App.Response;
    HttpRequest req = App.Request;

    if (res.StatusCode == 404 && !req.Url.AbsolutePath.Equals(PageNotFoundUrl, StringComparison.InvariantCultureIgnoreCase))
    {
        App.Server.TransferRequest(PageNotFoundUrl);
    }
}

Это работает нормально, но я заметил в Fiddler, что на странице отображается код состояния 200, хотя исходный запрос был 404. Это не очень хорошо для поисковых систем.

Это ожидаемое поведение TransferRequest ? Могу ли я как-то поддерживать код состояния 404? Или мне было бы лучше использовать старый добрый Server.Transfer?

Обновление

Я пробовал это за пределами среды sharepoint, и запрос Server.TransferRequest действительно дает код состояния 200, удаляя 404 . Server.Transfer не работает, так как я не думаю, что он может дать конвейер.

Обновление 2

Благодаря приведенному ниже ответу я добавил следующее:

void App_PostRequestHandlerExecute(object sender, EventArgs e)
{
    HttpResponse res = App.Response;
    HttpRequest req = App.Request;

    if (req.Url.AbsolutePath.Equals(PageNotFoundUrl, StringComparison.InvariantCultureIgnoreCase))
    {
        res.StatusCode = 404;
    }
}

7
задан ScottE 14 February 2011 в 21:59
поделиться