Яка різниця між 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 сам викидає виняток.
Є безліч підводних каменів, які намагаються правильно налаштувати це. Тож якщо ви шукаєте короткий приклад, найкращі два варіанти:
Приклад 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 обробляти користувацьку сторінку. Друг створив таку настройку, коли знайду деякий час, поділюсь кодом.
Фон
Хороша спеціальна сторінка помилок:
Отже, щоб уточнити деякі параметри в нашому конфігурації:
<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
Цитується джерело: Користувацькі сторінки 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.
httpErrors: IIS 7 і пізніші версії використовуйте цей розділ, а також розділ customErrors для обробки користувальницьких помилок http на основі розширень файлів, якщо запитуйте реєстр розширень сторінки за допомогою dll ISAPI (.aspx, ashx, .asmx, .svc тощо), наприклад index.aspx, то Налаштування IIS підбирають у розділі customeErrors, інакше підбирають налаштування з httpErrors (розміщений режим IIS 7 повинен бути встановлений як інтегрований настрій, а не класичний)
Нижче наведено приклади, що стосуються перевірки посилань на обробку помилок 404: