Jaka jest różnica między sekcjami customErrors
i httpErrors
pliku web.config w aplikacjach ASP.NET MVC?
Jakie są wskazówki dotyczące korzystania z każdej sekcji?
Jaka jest różnica między sekcjami customErrors
i httpErrors
pliku web.config w aplikacjach ASP.NET MVC?
Jakie są wskazówki dotyczące korzystania z każdej sekcji?
Odpowiedzi:
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.
VSDS
użyciucustomErrors
IIS6
użytkucustomErrors
IIS7
użytku httpErrors
.a jeśli rozwijasz się z, VSDS
ale publikujesz IIS7
, to myślę, że będziesz potrzebować obu.
* 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.
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:
Aby wyjaśnić niektóre opcje w naszej konfiguracji:
<customErrors mode="RemoteOnly"
. Można podać tutaj: On
, Off
, RemoteOnly
.
On
= Zawsze pokazuj niestandardowe strony błędówOff
= Zawsze pokazuj rzeczywisty błądRemoteOnly
= Pokaż błąd lokalnie, ale pokaż zdalnie niestandardową stronę błędu. Więc chcemy RemoteOnly
zdania 1<customErrors redirectMode="ResponseRewrite"
. Możesz określić tutaj: ResponseRedirect
lub ResponseRewrite
. ResponseRedirect
Tryb 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.
<httpErrors errorMode="DetailedLocalOnly"
. To odpowiednik customErrors
trybu. 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
<customErrors>
przeciw <httpErrors>
<customErrors>
<httpErrors>
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ł)
ExecuteURL
obsługuje zawartość dynamiczną, taką jak strona .aspx ( path
wartość 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
it's no loger necesary to use customErrors
i cytat, to naprawdę informacja, której szukałem :-)
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: