Jaka jest różnica między customErrors i httpErrors?

168

Jaka jest różnica między sekcjami customErrorsi httpErrorspliku web.config w aplikacjach ASP.NET MVC?

Jakie są wskazówki dotyczące korzystania z każdej sekcji?

Alan T.
źródło
1
IMHO - HttpError to obsługa komunikatów o błędach na poziomie usług IIS, podczas gdy CustomError to obsługa błędów w aplikacji sieci Web przez ASP.Net. Ale chciałbym wiedzieć więcej ...
Słoneczny

Odpowiedzi:

85

Zastrzeżenie: wynika to z mojego doświadczenia i nie zostało udowodnione.

Oba służą do definiowania obsługi błędów w witrynie internetowej, ale inne oprogramowanie odwołuje się do różnych elementów konfiguracji.

customErrors są starszym (kompatybilnym wstecz) elementem używanym przez Visual Studio Development Server (inaczej VSDS lub Cassini).

httpErrors to nowy element używany tylko przez IIS7.

Podkreśla to możliwy problem podczas tworzenia witryn sieci Web ASP.NET podczas korzystania z VSDS zamiast lokalnych usług IIS.

Zapoznaj się również z tym postem dotyczącym obsługi komunikatów o błędach w usługach IIS7, jeśli chcesz mieć pełną kontrolę nad wyjściami błędów.

Podsumowanie:

  • Rozwój w VSDSużyciucustomErrors
  • Udostępnianie witryny do IIS6użytkucustomErrors
  • Udostępnianie witryny do IIS7użytku httpErrors.

a jeśli rozwijasz się z, VSDSale publikujesz IIS7, to myślę, że będziesz potrzebować obu.

Pure.Krome
źródło
30
customErrors dotyczą asp.net. Błędy httpErrors są dla IIS7, więc obsługują zawartość, która nie przechodzi przez procedurę obsługi .net (np. .png, .js itp.). Jeśli chcesz mieć strony błędów dla typów zawartości innych niż.net, użyj stron błędów usług IIS (httpErrors dla IIS7 , interfejs użytkownika dla IIS6.)
zcrar70
4
Zalecam zainstalowanie i używanie IIS 7 Express z Visual Studio do celów debugowania. Będzie używał tych samych opcji konfiguracyjnych, co zwykłe IIS 7, w przeciwieństwie do Cassini.
Sean
nie jest już konieczne używanie customErrors od @johnB. I zbyt potrzebne? 1.) włącz opcję „Wyślij błędy do przeglądarki” w sekcji „ASP”. Właściwości debugowania 2.) w sekcji „Strony błędów / Edytuj ustawienia funkcji” wybierz opcję „Szczegółowe błędy”. 3.) wyłącz
opcję
136

* Zaktualizowano kwiecień 2016 r

Atrybut customErrors jest używany, gdy kod .net zgłasza wyjątek (404, 403, 500 itd.), A atrybut httpErrors jest używany, gdy same usługi IIS zgłaszają wyjątek.

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / throw500 -> customErrors 500

Istnieje wiele pułapek podczas próby poprawnej konfiguracji. Jeśli więc szukasz szybkiego przykładu, najlepsze dostępne opcje to:

Przykład 1: Korzystanie ze stron 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>

Przykład 2: używanie stron 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>

A na stronach błędów aspx musisz zrobić coś takiego (przykładowa strona 404):

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

Uwaga: użycie adresów URL bez rozszerzeń w sekcji customErrors nie jest możliwe! . (bez hacków)

Jednym obejściem jest wyłączenie niestandardowych błędów i zezwolenie błędom http na obsługę niestandardowej strony. Znajomy stworzył taką konfigurację, jak znajdę trochę czasu to udostępnię kod.

tło

Dobra niestandardowa strona błędu:

  1. Pokaż prawdziwy wyjątek, gdy odwiedzasz lokalnie stronę z problemem
  2. Pokaż niestandardową stronę podczas zdalnego odwiedzania strony z problemem
  3. Nie przekieruje, ale po prostu pokaże zawartość strony błędu (z powodów SEO)
  4. Pokaże poprawny kod statusu

Aby wyjaśnić niektóre opcje w naszej konfiguracji:

  1. <customErrors mode="RemoteOnly". Można podać tutaj: On, Off, RemoteOnly.

    • On = Zawsze pokazuj niestandardowe strony błędów
    • Off = Zawsze pokazuj rzeczywisty błąd
    • RemoteOnly= Pokaż błąd lokalnie, ale pokaż zdalnie niestandardową stronę błędu. Więc chcemy RemoteOnlyzdania 1
  2. <customErrors redirectMode="ResponseRewrite". Możesz określić tutaj: ResponseRedirectlub ResponseRewrite. ResponseRedirectTryb przekieruje na stronę błędu na stronę błędu niestandardowego. W przypadku robota indeksującego linki (SEO) spowoduje to 302 -> 500, ale chcesz, aby robot indeksujący linki otrzymał błąd 500.

  3. <httpErrors errorMode="DetailedLocalOnly". To odpowiednik customErrorstrybu. Opcje, które masz: Custom, Detailed, DetailedLocalOnly.

Dobry wpis na blogu, który bardzo mi pomógł, to: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

Maarten Kieft
źródło
Jakie rodzaje relacji customErrors - httpErrors i konfiguracja IIS, np. „Wyślij błędy do przeglądarki” w ASP - Właściwości debugowania i „Strony błędów / Edytuj ustawienia funkcji”, „Błędy szczegółowe”. ? stackoverflow.com/questions/2640526/…
Kiquenet
36

<customErrors> przeciw <httpErrors>


<customErrors>

  • nadal dostępne w IIS7 +
  • określ niestandardowe strony błędów dla żądań obsługiwanych przez ASP.NET
  • obsługuje tylko żądania w aplikacji ASP.NET
  • pliki statyczne, takie jak pliki HTML lub adresy URL katalogów („przyjazne”), nie są obsługiwane

<httpErrors>

  • wprowadzone w IIS7
  • określ niestandardowe strony błędów dla żądań obsługiwanych przez usługi IIS
  • obsługuje żądania w aplikacji ASP.NET ORAZ / LUB obsługuje żądania spoza aplikacji - ASP.NET *
  • wszystkie pliki i adresy URL są obsługiwane *

Uwaga: nie jest już konieczne użycie customErrors

Cytowane źródło: niestandardowe 404 i strony błędów w ASP.NET (doskonały artykuł)


ExecuteURLobsługuje zawartość dynamiczną, taką jak strona .aspx ( pathwartość musi być względnym adresem URL serwera ):

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
  </httpErrors>
</system.webServer>

File wyświetla niestandardowy plik błędów, taki jak strona .html:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

Źródła : błędy HTTP (www.iis.net)

Aby uzyskać więcej informacji, przeczytaj łącze www.iis.net powyżej

JohnB
źródło
Może przydatne ** stackoverflow.com/questions/2640526/… **, jeśli połączysz httpErrors z „Wyślij błędy do przeglądarki” i Stronami błędów
Kiquenet
3
+1 za notatkę it's no loger necesary to use customErrorsi cytat, to naprawdę informacja, której szukałem :-)
Myster
4

Sekcja błędów w konfiguracji sieciowej służy do zapewnienia niestandardowego podejścia do obsługi błędów http. Istnieją dwie sekcje, jedna niestandardowa błąd w sekcji system.web i druga httpErrors w sekcji system.webServer (jak podano poniżej)

customErrors: Ta sekcja była używana przed wprowadzeniem usług IIS 7, IIS 6 5 i przed pełnym użyciem tej sekcji do obsługi niestandardowych błędów http zgodnie z kodem stanu http.

httpErrors: IIS 7 i nowsze używają tej sekcji, a także sekcji customErrors do obsługi niestandardowych błędów http na podstawie ich rozszerzeń plików, jeśli żądane rozszerzenie strony rejestruje się w dll ISAPI (.aspx, ashx, .asmx, .svc itp.), tak jak index.aspx. Ustawienie pobierania usług IIS z sekcji customeErrors w przeciwnym razie odbiera ustawienie z httpErrors (tryb hostowany usług IIS 7 musi być ustawiony jako zintegrowany nastrój, a nie klasyczny)

poniżej znajdują się przykłady linku kontrolnego obsługi błędów 404:

httperrors a customerrors w webconfig, iis, asp.net

Rohit
źródło