MVC4 после переопределения onException по-прежнему возвращает страницу внешней ошибки - PullRequest
0 голосов
/ 16 апреля 2020

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

protected override void OnException(ExceptionContext filterContext)
{
  if (filterContext.Exception is CustomAppException) {
    var errModel = new ErrorModel(filterContext.Exception);
    filterContext.Result = PartialView("~/Views/Shared/CustomErrorPage.cshtml", errModel);
  }
  else {
    // do something diff  
  }
  filterContext.HttpContext.Response.StatusCode = 500;
  filterContext.ExceptionHandled = true;  
  filterContext.HttpContext.Response.Clear();
}

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

<customErrors mode="Off" />

Метод Application_Start все еще содержит вызов фильтра регистров

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
// which leads to
filters.Add(new HandleErrorAttribute());

На моем локальном VS2019 и локальном IIS это работает: когда происходит исключение, контроллер возвращает пользовательское представление. После развертывания на тестовом сервере IIS он возвращает другую страницу ошибок, обычную страницу 500 внутренних ошибок сервера. Почему? В чем разница? Как настроить этот код для работы на сервере IIS, а также на локальном?

PS: то же самое происходит, когда код ответа не 500, а 400. В этом случае возвращается небольшой текст, содержащий «Bad запрос". Оба (локальный и тестовый) IIS имеют одинаковые параметры страниц ошибок.

...