ASP.NET CustomErrors не запускается, когда возникают исключения в global.asax или в web.config - PullRequest
4 голосов
/ 31 июля 2010

У меня ASP.NET настроен для использования функции CustomErrors:

<customErrors mode="On" defaultRedirect="~/ErrorPages/500.aspx" redirectMode="ResponseRewrite">
    <error statusCode="404" redirect="~/ErrorPages/404.aspx" />
    <error statusCode="500" redirect="~/ErrorPages/500.aspx" />
</customErrors>

Все работает хорошо, и соответствующие страницы ошибок отображаются, когда это необходимо.

За исключением следующих двух случаев:

1) При возникновении исключения в global.asax:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        throw new ApplicationException("Exception in Application_Start()");
    }
}

2) При синтаксической ошибке в web.config

В обоих случаях я не вижу свою симпатичную страницу 500.aspx. Вместо этого я вижу стандартный желтый экран смерти ASP.NET со следующим сообщением:

Ошибка сервера в приложении / MvcErrorHandling.
Ошибка выполнения
Описание: на сервере произошла ошибка приложения. Текущие пользовательские настройки ошибок для этого приложения не позволяют просматривать подробности ошибки приложения.

Как я могу заставить ASP.NET или IIS отображать пользовательскую страницу ошибки (симпатичную, вместо YSOD) в двух вышеупомянутых сценариях?

Заранее спасибо за любой вклад:)

1 Ответ

1 голос
/ 31 июля 2010

Проблема заключается в том, что эти конкретные ошибки происходят до того, как ASP.NET может загрузить данные, и ваша страница «500 внутренняя ошибка сервера» является страницей .aspx, для загрузки которой требуется ASP.NET.

Самым простым вариантом было бы сделать вашу страницу 500 HTML-страницей, но это означало бы, что вы не можете делать простую регистрацию ошибок и т. Д. Оттуда.

Это может все еще не помочь сценарию web.config, так как если IIS не может обработать web.config, нет гарантии, что он прочитает ваш раздел об ошибке.

Другим вариантом было бы указать IIS обслуживать статическую HTML-страницу на 500 ошибок.

Наконец, вы можете попробовать отловить ошибки в событии Application_Error в файле web.config - это по крайней мере позволит вам обработать ошибку, даже если страница, которую вы пытаетесь отобразить, не может загрузиться.


Изменить, чтобы добавить

Если вы работаете с IIS 7 в интегрированном режиме, вам нужно сделать еще одну вещь, если вы устанавливаете код ответа на странице ошибок на 500:

Response.TrySkipIisCustomErrors = true;

Однако обратите внимание, что следующие условия не позволят отображать любую пользовательскую страницу ошибки 500, что приведет к YSOD:

  1. Ошибки в web.config или определенных обработчиках в web.config, которые запускаются до остальной части конвейера (т. Е. Основная часть исходного ответа)
  2. Ошибки на странице ошибок.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...