Яка різниця між customErrors та httpErrors?


168

Яка різниця між customErrorsта httpErrorsрозділами файлу web.config у програмах ASP.NET MVC?

Які вказівки щодо використання кожного розділу?


1
IMHO - HttpError - це рівень IIS для обробки повідомлень про помилки, а CustomError - обробка ASP.Net для помилок у веб-програмі. Але хотілося б дізнатися більше ...
Сонячний

Відповіді:


85

Відмова: Це з мого досвіду і не доведений факт.

Обидва використовуються для визначення поводження з помилками для веб-сайту, але різне програмне забезпечення стосується різних елементів конфігурації.

customErrors - це застарілий (назад сумісний) елемент, який використовується Visual Studio Development Server (ака. VSDS або Cassini).

httpErrors - це новий елемент, який використовується лише IIS7.

Це підкреслює можливу проблему при розробці веб-сайтів ASP.NET під час використання VSDS замість локального IIS.

Також зверніться до цього повідомлення про те, як обробляти повідомлення про помилки з IIS7, якщо ви хочете мати повний контроль над виведенням помилок.

Підсумок:

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

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


30
customErrors призначені для asp.net. httpErrors призначені для IIS7, і тому обробляйте вміст, який не проходить через обробник .net (наприклад, .png, .js тощо). Якщо ви хочете сторінки помилок для типів вмісту, які не є.net, використовуйте сторінки помилок IIS (httpErrors для IIS7 , інтерфейс для IIS6.)
zcrar70

4
Я рекомендую встановити та використовувати IIS 7 Express з Visual Studio для налагодження. Він буде використовувати ті самі параметри конфігурації, що і звичайний IIS 7, на відміну від Cassini.
Шон

більше не потрібно використовувати customErrors від @johnB. І занадто потрібні? 1.) увімкніть "Надіслати помилки в браузер" у розділі "ASP". Властивості налагодження 2.) у розділі "Сторінки помилок / Редагувати параметри функції" виберіть "Детальні помилки". 3.) відключити "Показувати повідомлення про помилки HTTP" в IE stackoverflow.com/questions/2640526 / ...
Kiquenet

136

* Оновлено квітень 2016 року

Атрибут customErrors використовується, коли код .net кидає виняток (404, 403, 500 тощо), а атрибут httpErrors використовується, коли IIS сам викидає виняток.

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / кидайте 500 -> 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 обробляти користувацьку сторінку. Друг створив таку настройку, коли знайду деякий час, поділюсь кодом.

Фон

Хороша спеціальна сторінка помилок:

  1. Покажіть справжній виняток, коли ви відвідуєте проблемну сторінку локально
  2. Показуйте користувацьку сторінку, коли ви віддалено відвідуєте проблемну сторінку
  3. Не буде переспрямовуватись, а просто показувати вміст сторінки помилок (через причини seo)
  4. З'явиться правильний код статусу

Отже, щоб уточнити деякі параметри в нашому конфігурації:

  1. <customErrors mode="RemoteOnly". Ви можете задати тут: On, Off, RemoteOnly.

    • On = Завжди показувати власні сторінки помилок
    • Off = Завжди показувати справжню помилку
    • RemoteOnly= Показувати помилку локально, але показувати власну сторінку помилок віддалено. Тому ми хочемо RemoteOnlyзаявити 1
  2. <customErrors 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 та IIS типу "Відправити помилки до браузера" в ASP - Властивості налагодження та "Сторінки помилок / Редагування параметрів функції", "Детальні помилки". ? stackoverflow.com/questions/2640526 / ...
Kiquenet

36

<customErrors> проти <httpErrors>


<customErrors>

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

<httpErrors>

  • введено в IIS7
  • вкажіть власні сторінки помилок для запитів, які обробляються IIS
  • обробляє запити в додатку ASP.NET І / АБО обробляє запити за межами додатка - 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 вище


Може бути корисно ** stackoverflow.com/questions/2640526 / ... ** якщо об'єднати httpErrors з «помилками відправки в браузер» і сторінках помилок
Kiquenet

3
+1 для замітки it's no loger necesary to use customErrorsта цитування, це справді інформація, яку я був після :-)
Myster

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.