Как программно установить Response.StatusCode, отличное от 200 OK в приложении ASP.NET, и успешно обслуживать контент для клиента?

Настройка Response.StatusCode = 404 не поддерживает контент ни в IE8, ни в Chrome? Он работает в Mozilla, хотя я нахожу это странным!

Простейший из них - пустой проект веб-приложения asp.net с пустой страницей Default.aspx. В событии Page_Load используйте следующее:

protected void Page_Load( object sender, EventArgs e )
{
    Response.StatusCode = 404;
}

Это фактически устанавливает код состояния текущего запроса на 404, без сомнения. При рендеринге в IE8 или Chrome, а также в некоторых других браузерах - я не тестировал, фактическая страница вообще не отображается. Эти браузеры отображают свои 404 страницы ошибок по умолчанию (нестандартные ошибки IIS по умолчанию). Пример в IE8:

The webpage cannot be found 
 HTTP 404  
   Most likely causes:
•There might be a typing error in the address.
•If you clicked on a link, it may be out of date. ... and so on ...

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

Использование fiddler показывает, что я действительно действительно выполняю запрос, но браузер полностью игнорирует его?!

Мой вопрос - как я могу установить код статуса 404 и все еще отображать содержимое страницы? Пример - http://www.intel.com/invalidpage.wow. Использование fiddler показывает, что эта страница обслуживается кодом статуса 404.

Ответы

Ответ 1

По умолчанию IE покажет страницу пользовательских ошибок, если ответ на ошибку меньше настраиваемой суммы. Я считаю, что сумма составляет 512 байт, но я попытаюсь найти подтверждение на этом. Итак, все, что вам нужно сделать, это добавить больше контента в ваш ответ.

EDIT: Это в блоге описывает ограничения. В одном из комментариев показаны параметры раздела реестра для изменения этих значений. Ключ:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\ErrorThresholds

Ответ 2

Вы не обслуживаете контент, вы устанавливаете страницу пользовательских ошибок на уровне веб-сервера (IIS) или в файле web.config в случае asp.net