Пользовательская страница 404 не отображается, если StatusCode не равен 200

В моем файле web.config у меня включены пользовательские ошибки:

<customErrors mode="On" defaultRedirect="~/Error">
    <error redirect="~/Error/NotFound" statusCode="404" />
</customErrors>

Мое NotFound действие:

public ActionResult NotFound()
{
    Response.StatusCode = 404;  //no issues when this is not set
    return View();
}

Проблема: эта конфигурация отлично работает на локальном сервере, но когда я перемещаю ее на удаленный сервер, пользовательские страницы 404 не отображаются (по умолчанию отображается 404 IIS), если не установлен код состояния действия NotFound. до 200.

Может ли кто-нибудь объяснить, что происходит?


person Maksim Vi.    schedule 08.04.2015    source источник


Ответы (1)


Вы также хотите отключить пользовательские ошибки IIS, установив TrySkipIisCustomErrors в true.

public ActionResult NotFound()
{
    Response.StatusCode = 404; 
    Response.TrySkipIisCustomErrors = true; <---
    return View();
}
person Win    schedule 08.04.2015
comment
Отлично, спасибо. Означает ли это, что он был вручную установлен где-то на сервере IIS для использования собственных пользовательских ошибок вместо ошибок приложений? - person Maksim Vi.; 08.04.2015
comment
В классическом режиме IIS 7 для параметра TrySkipIisCustomErrors установлено значение true по умолчанию. Однако я не рекомендую работать в классическом режиме, так как это можно исправить, просто используя TrySkipIisCustomErrors = true; при работе в новом интегрированном режиме. - person Win; 08.04.2015
comment
Полезно знать, но мой локальный IIS настроен на использование режима интегрированного конвейера, и пользовательская обработка 404, кажется, работает просто отлично (приведенный выше пример также хорошо работает на нескольких других серверах). - person Maksim Vi.; 09.04.2015