Должны ли пользовательские страницы ошибок в IIS7 возвращать код состояния ошибки, изначально связанный с ними? - PullRequest
2 голосов
/ 18 июня 2010

Я пытаюсь использовать пользовательские страницы ошибок, используя перенаправления в IIS7. Это мой код:

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="/Pages/NotFound" responseMode="ExecuteURL" />
</httpErrors>

Как видите, строка <remove statusCode="404" subStatusCode="-1" /> сбрасывает код состояния, и когда я нажимаю на страницу, я получаю код состояния 200 для страницы, которая не найдена. Это действительно правильный способ обработки страниц, которые не найдены?

Насколько я понимаю, я хотел бы вернуть 404 ошибки, даже когда я показываю хорошую страницу с моего сайта для страниц, которые не существуют. Я знаю, что это крайний случай, но я пытаюсь охватить все свои базы.

страница, на которую я перенаправляю, является страницей .aspx и имеет код c #. На странице я помещаю:

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Status = "404 Not Found";
        } 

Этот код, похоже, на самом деле ничего не делает. У кого-нибудь есть какие-либо указания на то, должен ли я возвращать ошибки 404 и, если да, то как это сделать? Спасибо.

1 Ответ

1 голос
/ 18 июня 2010

Когда вы делаете перенаправление для страницы, которая не найдена, это, по сути, обработка исключений веб-сервером.Вы получите ответ 200, но просто хорошая страница с надписью: «Привет, то, что вы ищете, здесь нет».Без перенаправления / настраиваемой страницы ошибок браузер остается на своих собственных устройствах, чтобы видеть 404 и отображать некоторый тип ошибки для конечного пользователя.Ошибка 404 может быть зарегистрирована в этом случае, так как ошибка должна была произойти, чтобы получить перенаправление.Вам не нужно менять коды ответов, если у вас нет причин (например, для несанкционированного запроса контента вы можете вернуть 404 вместо того, чтобы сказать «неавторизованный».):

Response.StatusCode = 404;

Однако, если вы отправите ошибку 404 на свою пользовательскую страницу ошибки 404, вы попадете в какой-то безумный цикл в IIS.404 -> Страница пользовательских ошибок (возвращает 404) -> Страница пользовательских ошибок (возвращает 404) -> и т. Д.

...