В чем разница между customErrors
и httpErrors
секциями файла web.config в приложениях ASP.NET MVC?
Каковы рекомендации по использованию каждого раздела?
В чем разница между customErrors
и httpErrors
секциями файла web.config в приложениях ASP.NET MVC?
Каковы рекомендации по использованию каждого раздела?
Ответы:
Отказ от ответственности: это из моего опыта, а не доказанный факт.
Оба используются для определения обработки ошибок для веб-сайта, но разные программы ссылаются на разные элементы конфигурации.
customErrors
являются устаревшим (обратно совместимым) элементом, используемым Visual Studio Development Server (он же VSDS или Cassini).
httpErrors
являются новым элементом, который используется только IIS7.
Это подчеркивает возможную проблему при разработке веб-сайтов ASP.NET при использовании VSDS вместо локального IIS.
Кроме того, обратитесь к этому посту, чтобы узнать, как обрабатывать сообщения об ошибках в IIS7, если вы хотите полностью контролировать вывод ошибок.
VSDS
использованииcustomErrors
IIS6
использованияcustomErrors
IIS7
использования httpErrors
.и если вы разрабатываете, VSDS
но публикуете IIS7
, то, я думаю, вам понадобятся оба.
* Обновлено в апреле 2016
Атрибут customErrors используется, когда код .net вызывает исключение (404, 403, 500 и т. Д.), А атрибут httpErrors используется, когда сам IIS создает исключение.
Есть много ловушек, пытающихся настроить это правильно. Так что, если вы ищете быстрый пример, лучшие 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;
%>
Примечание. Использование расширений less url в разделе customErrors невозможно! , (без хаков)
Обходной путь - отключить пользовательские ошибки и позволить ошибкам http обрабатывать пользовательскую страницу. Друг создал такую настройку, когда найду время, поделюсь кодом.
Задний план
Хорошая пользовательская страница ошибки будет:
Итак, чтобы уточнить некоторые параметры в нашем конфиге:
<customErrors mode="RemoteOnly"
, Вы можете задать здесь: On
, Off
, RemoteOnly
.
On
= Всегда показывать пользовательские страницы ошибокOff
= Всегда показывать реальную ошибкуRemoteOnly
= Показать ошибку локально, но показать страницу с ошибкой удаленно. Итак, мы хотим RemoteOnly
для утверждения 1<customErrors 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>
<httpErrors>
Примечание: больше нет необходимости использовать
customErrors
Цитируемый источник: Custom 404 и страницы ошибок в ASP.NET (отличная статья)
ExecuteURL
обслуживает динамическое содержимое, например страницу ASPX ( path
значение должно быть относительным 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
обслуживает пользовательский файл ошибок, например страницу 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 выше
it's no loger necesary to use customErrors
и цитату, это - действительно информация, за которой я был :-)
Раздел ошибок в веб-конфигурации предназначен для обеспечения настраиваемого подхода к обработке ошибок http. Есть два раздела: один customErrors внутри раздела system.web и другой httpErrors внутри раздела system.webServer (как показано ниже)
customErrors: этот раздел использовался до введения IIS 7, IIS 6 5 и до полного использования этого раздела для обработки пользовательских ошибок http в соответствии с кодом состояния http.
Ошибки http: IIS 7 и более поздние версии используют этот раздел, а также раздел customErrors для обработки пользовательских ошибок http на основе их расширений файлов, если запрашиваемое расширение страницы регистрируется в ISAPI dll (.aspx, ashx, .asmx, .svc и т. д.), например index.aspx затем IIS забирает настройку из раздела customeErrors, иначе он выбирает настройку из httpErrors (режим размещения IIS 7 должен быть настроен как интегрированное, а не классическое настроение)
ниже приведены примеры для 404 ссылки проверки ошибок: