В чем разница между разделами customErrors
и httpErrors
файла web.config в приложениях ASP.NET MVC?
Каковы рекомендации по использованию каждого раздела?
В чем разница между разделами customErrors
и httpErrors
файла web.config в приложениях ASP.NET MVC?
Каковы рекомендации по использованию каждого раздела?
Отказ от ответственности: это из моего опыта и не доказанного факта.
Оба используются для определения обработки ошибок для веб-сайта, но другое программное обеспечение относится к различным конфигурационным элементам.
customErrors
- это устаревший (обратный совместимый) элемент, используемый сервером разработки Visual Studio (например, 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 сам генерирует исключение.
Есть много ошибок, которые нужно правильно настроить. Поэтому, если вы ищете быстрый пример, у вас есть два лучших варианта:
Пример 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-ошибкам обрабатывать пользовательскую страницу. Друг создал такую настройку, когда найду какое-то время, я поделюсь кодом.
Фон
Хорошая пользовательская страница ошибок будет:
Итак, чтобы уточнить некоторые параметры в нашей конфигурации:
Хорошее сообщение в блоге, которое мне очень помогло: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
по сравнению с <httpErrors>
<customErrors>
<httpErrors>
Примечание: больше не нужно использовать
customErrors
Источник цитирования: Пользовательские 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 выше
Раздел "Ошибки" в веб-конфигурации предназначен для обеспечения пользовательского подхода к обработке ошибок HTTP, есть два раздела, один customErrors внутри раздела system.web и другие httpErrors внутри раздела system.webServer(как указано ниже)
customErrors: Этот раздел использовался до ввода IIS 7, IIS 6 5 и прежде, чем полностью использовать этот раздел для обработки пользовательских ошибок HTTP в соответствии с кодом состояния http.
httpErrors: IIS 7 и более поздние версии используют этот раздел, а также customErrors для обработки пользовательских ошибок HTTP на основе их расширений файлов, если запрашиваемый регистр расширения страницы с dll ISAPI (.aspx, ashx,.asmx,.svc и т.д.). например index.aspx, тогда IIS выбирает параметр из раздела customeErrors, иначе он выбирает параметр из httpErrors (режим размещения IIS 7 должен быть настроен как настроенное настроение, а не классическое)
ниже приведены примеры, которые относятся к ссылке проверки ошибок 404: