|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Для пользовательских страниц ошибок использую настройку блока system.webServer -> httpErrors в web-config. Данная настройка работает для ISS 7 и выше. Настройка такая: Код: html 1. 2. 3. 4. 5. 6. 7. 8.
И есть Error контроллер: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Для перечисленных кодов все работает отлично. Но получаю такую проблему, если сервером будет выброшена ошибка которая не перечислена у меня в конфиге (например в коде бросаю exception и полую HTTP 500), то получаю чистую страницу со строкой нечитаемых символов - "Невозможно отобразить эту страницу РІРІРёРґСѓ того, что произошла внутренняя ошибка сервера." Если для обработки исключений в коде использовать фильтр ошибок и класс HandleErrorAttribute или фильтр ошибок и класс с собственной реализацией IExceptionFilter или переопределение метода OnException в контроллере с установкой filterContext.Result, то в случае exception получаю тоже самое, чистую страницу со строкой нечитаемых символов. Полагаю потому, что настройка httpErrors работает на уровне IIS и поверх asp.net. И в случае отсутствия соответствующего кода в конфиге выдает такой странный ответ. Если же выключить настройку httpErrors (errorMode="Detailed"), то обработка exception через фильтры или переопределение метода работает, выводиться представление из Shared/Error. Получается, что при настройке пользовательских ошибок через httpErrors в конфиге мне нужно перечислить все возможные коды. Пробовал установить параметры по умолчанию на статический файл ошибки: Код: html 1.
Получаю ошибку 500.19, страница недоступна из-за неверной конфигурации и выделена красным эта строка в конфиге. В итоге, подскажите пожалуйста, как мне настроить пользовательские страницы в конфиге в httpErrors (перечислить там только некоторые основные), чтобы при получение ошибки не перечисленной в конфиге получить нормальную страницу с ошибкой сервера (может стандартную)? Или как добиться того, чтобы обработка exception через фильтр работала и не "перезатиралась" настройкой httpErrors в конфиге? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 14:20 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Может кто-нибудь тогда подскажет, как кто делать пользовательские страницы ошибок? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 15:44 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
ну какие хочешь отдельно обработать ты уже указал для других укажи всегда один урл какой то общий и все. Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 16:58 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Видимо, я как-то не так настраиваю конфиг. Когда устанавливаю параметр defaultPath всегда сервер выдает ошибку 500.19 - Запрашиваемая страница не доступна из-за неверной конфигурации данных для этой страницы. И ругается на строку конфига - <httpErrors errorMode="Custom" ... >. Пробовал разные варианты, сделал статический html, задавал такие варианты: defaultPath="~/Shared/Error.html" defaultPath="~/Shared/Error.htm" defaultPath="/Shared/Error.html" defaultPath="/Shared/Error.htm" Сделал в Error контроллере метод: Код: c# 1. 2. 3. 4. 5.
И соответствующее представление, задал параметр defaultPath="/Error/InternalServerError", тоже самое. Как в итоге то правильно настроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 17:35 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Как исправить ошибку 500.19 нашел - https://serverfault.com/questions/53712/in-iis-7-how-do-i-set-up-a-default-error-document-for-any-error. Оказывается в applicationhost.config есть блок для httpError в котором могут быть заблокированы атрибуты. Необходимо вместо Код: xml 1.
использовать Код: xml 1.
Но полностью проблема не решена все равно. Например, при таком конфиге: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
в случае выброса exeption в методе действия (HTTP 500) параметр defaultPath="/Error/InternalServerError" не отрабатывает, метод InternalServerError контроллера не запускается. На выходе снова получаю пустую страницу с нечитаемыми символами. Если же явно обработать ошибку 500 в конфиге: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
то метод InternalServerError запускается, корректная страница выводится. Получается default параметр не отрабатывает и нужно перечислять все коды ошибок HTTP. Может кто-нибудь знает, почему выводится такая странная страница с нечитаемыми символами? И почему еще может не работать defaultPath? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 21:50 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Текст вывода - "Невозможно отобразить эту страницу РІРІРёРґСѓ того, что произошла внутренняя ошибка сервера." при подборе правильной кодировки такой - " Невозможно отобразить эту страницу ввиду того, что произошла внутренняя ошибка сервера.". Почему тогда не хочет запускаться Error/InternalServerError непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:19 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Код: xml 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:24 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Код: c# 1. 2. 3.
тоже желательно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:26 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
В принципе все понятно стало. При таком варианте web.config: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
я не очистил statusCode="500", а он был наследован из applicationhost.config: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
поэтому и default не отработывал, а срабатывал Код: xml 1.
плюс что-то с кодировкой был в этом варианте, поэтому такой результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:27 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Также ошибка может быть в самой вьюхе, или в Layout. Поэтому не стоит заменять страницы ошибок 500, 403 на действия контроллера. 404 куда ни шло. Лучше статические HTML, так как если ошибка будет где-то в лейаутах или вьюхах, вся мулька со страницами ошибок накроется медным тазом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:28 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
hVosttOleg5555, Код: c# 1. 2. 3.
тоже желательно Ок, спасибо за комментарии ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2017, 22:35 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
С реализацией через ErrorController вроде разобрался. По поводу статических страниц ошибок согласен. Но при попытке такой реализации опять столкнулся с проблемой. Например, при таком конфиге с responseMode="File": Код: xml 1. 2. 3. 4.
при возникновении соответствующей ошибки (например, 404) опять выводится какая-то стандартная страница в непонятной кодировке. Если же использовать responseMode="ExecuteURL" все работает, заданные в конфиге страницы отображаются, но такой режим не сохраняет HTTP код и при всех ошибках на клиенте получаю код 200. Может кто знает, какую еще особенность я упустил для такого варианта настройки? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 13:34 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, В случае любых нестатических методов: действие контроллера, хендлер, aspx странцица, код ошибки надо устанавливать вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 13:46 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
hVosttOleg5555, В случае любых нестатических методов: действие контроллера, хендлер, aspx странцица, код ошибки надо устанавливать вручную. Не, тут проблема в другом. Не работало даже для 404.html. А не работало потому, что в режиме responseMode="File", слешы должны быть как в файловой системе, обратные и на первом месте слеш не нужен. Должно быть так: Код: xml 1. 2. 3. 4.
В итоге 404.html работает. Но defaultPath не работает, опять какая-то стандартная страница в неверной кодировке для случая default. Надо дальше копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 13:59 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555В итоге 404.html работает. Но defaultPath не работает, опять какая-то стандартная страница в неверной кодировке для случая default. Надо дальше копать. Попробуй полный путь задать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 15:44 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
hVosttOleg5555В итоге 404.html работает. Но defaultPath не работает, опять какая-то стандартная страница в неверной кодировке для случая default. Надо дальше копать. Попробуй полный путь задать. А полный путь это какой? У меня папка Errors находится в корне проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 16:02 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Пробовал указать полный абсолютный путь на моем локальном компьютере до файла Common.html в качестве значения параметра defaultPath (defaultPath="D:\_Проекты\Web\...\Errors\Common.html"), default отработал. А при таком варианте defaultPath="Errors\Common.html" не отрабатывает. Очень странно. Я же не могу в проекте использовать в конфиге такой абсолютный путь. Может кто-то знает от чего это зависит? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 16:57 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Почитайте здесь https://docs.microsoft.com/en-us/iis/configuration/system.webserver/httperrors/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 18:48 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Вообщем не нашел я почему в defaultPath не работает относительный путь на статический ресурс. Единственный вариант сделать страницу Default.html на уровне iss и настроить конфиг так: Код: xml 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 21:51 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Зачем вообще так заморачиваться? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 22:23 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555, Переходи на Core, там такой мудотни нет ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2017, 22:24 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Не думал, что для такой стандартной задачи будут всплывать такие заморочки. Core еще не пробовал, в нем такая задача решается просто? Вообще, платформа достаточна свежая, какие у вас отзывы о ней? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 10:21 |
|
Пользовательские страницы ошибок, настройка блока httpErrors в web-config
|
|||
---|---|---|---|
#18+
Oleg5555Не думал, что для такой стандартной задачи будут всплывать такие заморочки. Core еще не пробовал, в нем такая задача решается просто? Вообще, платформа достаточна свежая, какие у вас отзывы о ней? Мы с ней работаем, уже довольно взрослая платформа, хоть и не без косяков. Решается с помощью middleware. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2017, 10:27 |
|
|
start [/forum/topic.php?fid=18&fpage=25&tid=1355432]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 158ms |
0 / 0 |