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



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



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

546   4  

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-ошибкам обрабатывать пользовательскую страницу. Друг создал такую настройку, когда я найду некоторое время, я поделюсь кодом.

фон

хорошая пользовательская страница ошибки будет:

  1. показать реальное исключение при посещении страницы проблемы локально
  2. показать пользовательская страница при удаленном посещении страницы проблемы
  3. не будет перенаправлять, а просто показать содержимое страницы ошибки (из-за seo причин)
  4. покажет правильный код состояния

Итак, чтобы уточнить некоторые параметры в нашей конфигурации:

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

    Ничего не найдено.