Наши контроллеры сбрасывают пользовательские исключения, когда обнаруживают что-то плохое. Мы переопределили метод 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 имеют одинаковые параметры страниц ошибок.