4 ответов:
отказ от ответственности: это из моего опыта, а не доказанный факт.
оба используются для определения обработки ошибок для веб-сайта, но различное программное обеспечение относится к различным элементам конфигурации.
customErrorsявляются устаревшим (обратно совместимым) элементом, используемым сервером разработки Visual Studio (aka. Регулируемым приводом или Кассини).
httpErrors- это новый элемент, который используется только IIS7.это подчеркивает возможно проблема при разработке сайтов ASP.NET при использовании с регулируемым приводом вместо локальный веб-сервер IIS.
и обратитесь к этому сообщению самостоятельно о том, как обрабатывать сообщения об ошибках с помощью IIS7, если вы хотите иметь полный контроль над выводом ошибок.
резюме:
- в разработке
VSDS- используйтеcustomErrors- публикация сайта в
IIS6- используйтеcustomErrors- публикация сайта в
IIS7- используйтеhttpErrors.и если вы разрабатываете с
VSDSно опубликовать вIIS7, тогда, я думаю, у нужно.
*Обновлено В Апреле 2016
атрибут customErrors используется, когда код .net создает исключение (404, 403, 500 и т. д.), А атрибут httpErrors используется, когда сам IIS создает исключение.
- /myfakeextensionslessurl --> httpErrors 404
- / myfakeaspsx.aspx -- > customErrors 404
- / myfakeimage.jpg --> httpErrors 404
- / throw500.apx --> customErrors 500
- / throw500 --> customErrors 500
есть много подводных камней, пытаясь правильно настроить это. Так что если вы ищете быстрый пример, лучшие 2 варианта у вас есть:
Пример 1: использование html-страниц
<system.web> <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite"> <error statusCode="403" redirect="/Error403.html" /> <error statusCode="404" redirect="/Error404.html" /> <error statusCode="500" redirect="/Error500.html" /> </customErrors> </system.web> <system.webServer> <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto"> <remove statusCode="403" /> <remove statusCode="404" /> <remove statusCode="500" /> <error statusCode="403" responseMode="File" path="Error403.html" /> <error statusCode="404" responseMode="File" path="Error404.html" /> <error statusCode="500" responseMode="File" path="Error500.html" /> </httpErrors> </system.webServer>Пример 2: Использование страниц aspx
<system.web> <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite"> <error statusCode="403" redirect="/Error403.aspx" /> <error statusCode="404" redirect="/Error404.aspx" /> <error statusCode="500" redirect="/Error500.aspx" /> </customErrors> </system.web> <system.webServer> <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto"> <remove statusCode="403" /> <remove statusCode="404" /> <remove statusCode="500" /> <error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" /> <error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" /> <error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" /> </httpErrors> </system.webServer>и на страницах ошибок aspx вам нужно сделать что-то вроде этого (пример 404 страницы):
<% Response.StatusCode = 404; Response.TrySkipIisCustomErrors = true; %>Примечание: Использование расширение без URL-адресов в разделе customErrors-это не возможно!. (без хаков)
один обходной путь-отключить пользовательские ошибки и позволить http-ошибкам обрабатывать пользовательскую страницу. Друг создал такую настройку, когда я найду некоторое время, я поделюсь кодом.
фон
хорошая пользовательская страница ошибки будет:
- показать реальное исключение при посещении страницы проблемы локально
- показать пользовательская страница при удаленном посещении страницы проблемы
- не будет перенаправлять, а просто показать содержимое страницы ошибки (из-за seo причин)
- покажет правильный код состояния
Итак, чтобы уточнить некоторые параметры в нашей конфигурации:
- customErrors mode= "RemoteOnly". Вы можете указать здесь: On, Off, RemoteOnly. На = отображать всегда пользовательские страницы ошибок, выкл = всегда показывают реальную ошибку, значение remoteonly = показать локально ошибку, но показывают пользовательская страница ошибки удаленно. Поэтому мы хотим RemoteOnly для утверждения 1
- customeErrors redirectMode= "ResponseRewrite". Вы можете разделить здесь: ResponseRedirect, ResponseRewrite. Модус ResponseRedirect будете перенаправлены на страницу ошибки на пользовательскую страницу ошибок. Для искателя ссылок (seo) это приведет к 302 -> 500. Хотя вы хотите, чтобы искатель ссылок получал просто ошибку 500.
- httpErrors errorMode= "DetailedLocalOnly" , это экваливант customErrors режим. Параметры, которые у вас есть: Custom, Detailed, DetailedLocalOnly
хороший пост в блоге, который мне очень помог:http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>и<httpErrors>
<customErrors>
- по-прежнему доступны в IIS7+
- укажите пользовательские страницы ошибок для запросов, обрабатываемых ASP.NET
- только обрабатывает запросы в пределах ASP.NET применение
- статические файлы, такие как HTML-файлы или каталог ("дружественные") URL-адреса не обрабатываются
<httpErrors>
- введен в IIS7
- укажите пользовательские страницы ошибок для запросов, обрабатываемых IIS
- обрабатывает запросы в пределах ASP.NET применение И/ИЛИ обрабатывает запросы вне - ASP.NET применение *
- все файлы и URL-адреса обрабатываются *
Примечание: больше не нужно использовать
customErrorsцитируемый источник: пользовательские 404 и страницы ошибок в ASP.NET (отлично статья)
ExecuteURLслужит динамическое содержимое, такое как an .страница aspx (thepathзначение должно быть относительный URL сервера):<system.webServer> <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" > <remove statusCode="404"/> <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" /> </httpErrors> </system.webServer>
Fileслужит пользовательский файл ошибок, например a .html страница:<system.webServer> <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" > <remove statusCode="404"/> <error statusCode="404" path="404.html" /> </httpErrors> </system.webServer>ссылки: ошибки HTTP (www.iis.net)
для получения более подробной информации, прочитайте www.iis.net ссылка выше
ошибки раздел в web config предназначен для обеспечения пользовательского подхода обработки ошибок http есть два раздела, один customErrors внутри раздела системы.web и еще один httpErrors внутри раздела system.веб-сервер (как указано ниже)
customErrors: Этот раздел использовался до появления IIS 7, IIS 6 5 и до полного использования этого раздела для обработки пользовательских ошибок http в соответствии с кодом состояния http.
httpErrors : IIS 7 и потом используйте этот раздел, а также customErrors Раздел для обработки пользовательских ошибок http на основе их расширений файлов, если требуется регистрация расширения страницы с ISAPI dll (.аспн, данного, .службы ASMX. ,svc и т. д.), Как индекс.аспн IIS, после чего подобрать параметр customeErrors раздел еще он забрать настройки из httpErrors (IIS 7 размещенный режим должен быть установлен как интегрированный настроение не классический)
ниже приведены примеры, которые для 404 ошибка обработки проверить ссылку :
httperrors vs customerrors в webconfig, iis, asp.net
Comments