Пользовательская страница ошибки 500 не работает в ASP.NET MVC 5

Вот моя конфигурация пользовательских ошибок web.config:

<system.web>
 <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/400.aspx">
  <error statusCode="404" redirect="~/404.aspx" />
  <error statusCode="500" redirect="~/500.aspx" />
  <error statusCode="400" redirect="~/400.aspx" />
</customErrors>
</system.web>
    <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="404.html" responseMode="File"/>
      <remove statusCode="500"/>
      <error statusCode="500" path="500.html" responseMode="File"/>
      <remove statusCode="400"/>
      <error statusCode="400" path="400.html" responseMode="File"/>
    </httpErrors>
 </system.webServer>

Отлично работает для 404. Но этот localhost: 44303 / ‹script>‹ / script> возвращает: Runtime Error.

Также создание нового исключения из действия намеренно перенаправляет на страницу ошибки mvc, которую я хочу переопределить с помощью моего 500.aspx


person mishap    schedule 09.01.2015    source источник


Ответы (1)


После некоторого исследования исходного кода для HandleErrorAttribute, который добавлен в качестве глобального фильтра, есть код, который пытается заставить приложение использовать страницу ошибок MVC.

Я создал подкласс HandleErrorAttribute и полностью перевернул эту строку:

public class MyHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);

        filterContext.HttpContext.Response.TrySkipIisCustomErrors = false;
    }
}

Затем замените код в App_Start / FilterConfig.cs, чтобы использовать новый MyHandleErrorAttribute:

filters.Add(new MyHandleErrorAttribute());

Это должно помешать MVC переопределить вашу пользовательскую страницу 500.

person Mark Olsen    schedule 13.01.2015