В чем разница между customErrors и httpErrors?

В чем разница между разделами customErrors и httpErrors файла web.config в приложениях ASP.NET MVC?

Каковы рекомендации по использованию каждого раздела?

Ответ 1

Отказ от ответственности: это из моего опыта и не доказанного факта.

Оба используются для определения обработки ошибок для веб-сайта, но другое программное обеспечение относится к различным конфигурационным элементам.

customErrors - это устаревший (обратный совместимый) элемент, используемый сервером разработки Visual Studio (например, VSDS или Cassini).

httpErrors - новый элемент, который используется только IIS7.

Это указывает на возможную проблему при разработке веб-сайтов ASP.NET при использовании VSDS вместо локального IIS.

Кроме того, ссылается на этот пост сам о том, как обрабатывать сообщения об ошибках с IIS7, если вы хотите полностью контролировать вывод ошибки.

Резюме:

  • Разработка VSDS - использование customErrors
  • Публикация сайта IIS6 - использование customErrors
  • Публикация сайта IIS7 - использование httpErrors.

и если вы разрабатываете с помощью VSDS, но публикуете в IIS7, то я думаю, вам понадобятся оба.

Ответ 2

* Обновлен в апреле 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

Есть много ошибок, которые нужно правильно настроить. Поэтому, если вы ищете быстрый пример, у вас есть два лучших варианта:

Пример 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. On = Показывать всегда настраиваемые страницы ошибок, Off = Показывать всегда реальную ошибку, RemoteOnly = Показать локально ошибку, но показывать страницу пользовательских ошибок удаленно. Поэтому мы хотим RemoteOnly для оператора 1
  • customeErrors redirectMode = "ResponseRewrite". Вы можете отменить здесь: ResponseRedirect, ResponseRewrite. Модуль ResponseRedirect modus перенаправит страницу с ошибкой на страницу пользовательской ошибки. Для искателя ссылок (seo) это приведет к 302 → 500. Хотя вы хотите, чтобы искатель ссылок получал просто ошибку 500.
  • httpErrors errorMode = "DetailedLocalOnly", это эквивалент режима customErrors. Параметры, которые у вас есть: пользовательские, подробные, подробныеLocalOnly

Хорошее сообщение в блоге, которое мне очень помогло: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

Ответ 3

<customErrors> по сравнению с <httpErrors>


<customErrors>

  • все еще доступен в IIS7 +
  • указать пользовательские страницы ошибок для запросов, обрабатываемых ASP.NET
  • обрабатывает запросы только в приложении ASP.NET
  • статические файлы, такие как HTML файлы или каталоги ( "дружественные" ), не обрабатываются.

<httpErrors>

  • введенный в IIS7
  • указать пользовательские страницы ошибок для запросов, обрабатываемых IIS
  • обрабатывает запросы в приложении ASP.NET AND/OR обрабатывает запросы за пределами приложения ASP.NET *
  • обрабатываются все файлы и URL-адреса *

Примечание: больше не нужно использовать 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 выше

Ответ 4

Раздел "Ошибки" в веб-конфигурации предназначен для обеспечения пользовательского подхода к обработке ошибок 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:

httperrors vs customerrors в webconfig, iis, asp.net