IIS7 - комбинация customErrors ASP.NET, httpErrors IIS

Я видел несколько похожих вопросов на StackOverflow и на других сайтах, но ничего, что могло бы решить проблему, с которой я столкнулся.

Я пытаюсь настроить сайт так, чтобы он возвращал код состояния 500 и настраиваемую страницу ошибок (статический файл HTML) для ошибок ASP.NET, которые обычно возвращают 500, где customErrors установлен на «Выкл.», А код состояния 404 для страниц что наша система сообщает, что она не найдена (страница 404 не является статической страницей, установленной через IIS, она создается нашей системой CMS).

Я на полпути, но я наткнулся на кирпичную стену.

В настоящее время я могу вернуть правильный код состояния 404, когда наша система возвращает страницу с кодом состояния 404, но теперь я не могу вернуть код состояния 500 для ошибок сервера ASP.NET. Я справился с этим, установив Response.TrySkipIisCustomErrors = true. Однако мои 500 ошибок оказались более сложными. Если я удалю раздел конфигурации customErrors из своего web.config, я получу ошибку 500, но это уродливый ASP.NET YSOD. Я вообще не могу заставить это указывать на настраиваемую страницу, использующую IIS, независимо от того, какие настройки я использую для раздела конфигурации httpErrors и независимо от того, что я установил через графический интерфейс IIS. Если я снова добавлю раздел customErrors, я получу страницу с настраиваемой ошибкой, как и ожидал, но получаю ошибку 200 или 302 (в зависимости от значения атрибута redirectMode).

У кого-нибудь есть идеи?

Что касается раздела конфигурации httpErrors, я пробовал следующее:

Установка errorMode на «Custom» и указание моего статического содержимого для ошибок с statusCode «500» и subStatusCode «-1» (сначала удаление существующей ошибки 500). Установка errorMode на «Подробный» и указание моего статического содержимого для ошибок с statusCode «500» и subStatusCode «-1» (сначала удаление существующей ошибки 500) Установка existingResponse = «PassThrough» для обоих параметров конфигурации выше.


person Chris Disley    schedule 30.11.2011    source источник
comment
У меня одинаковое поведение в IIS7.0 и IIS7.5. Я отправлю соответствующие фрагменты из текущего файла web.config через несколько часов, когда вернусь в офис.   -  person Chris Disley    schedule 01.12.2011
comment
ИМХО, для полноты вопроса и ответа реальным образцом.   -  person Kiquenet    schedule 25.05.2016


Ответы (1)


Кажется, вы можете выйти за рамки того, что вам нужно сделать, если я правильно вас понимаю. Вот хорошая ссылка

Похоже, вам нужно обработать событие global.asax Application_Error. Таким образом, вы можете справиться с этим как хотите, и вы не получите этот уродливый экран с ошибкой asp.net. Любое веб-приложение, которое я создаю, я помещаю туда для обработки ошибок, чтобы пользователь не видел никаких неформатированных "взрывов".

person Etch    schedule 30.11.2011
comment
На самом деле мы запускаем HttpModule, который уже выполняет какие-то действия в обработчике Application_Error для пользовательского ведения журнала, но нам все равно нужно выдавать ошибку 500, когда возникает серьезная проблема, поскольку наш клиент использует инструменты, которые ищут код состояния 500, чтобы указать на серьезные проблемы с нескольких сайтов. , поэтому нам нужно выбросить их, чтобы они соответствовали друг другу, но мы не хотим, чтобы конечные пользователи видели YSOD, поскольку у нас есть совершенно хорошая читаемая человеком страница ошибок, чтобы поддерживать согласованность UX и не допускать подробностей основной ошибки любопытные глаза. - person Chris Disley; 01.12.2011
comment
Можете ли вы опубликовать часть этого кода? Я много раз занимался этим типом обработки ошибок, и, похоже, это не должно быть так сложно. Трудно придумать это без кода. - person Etch; 01.12.2011