ASP.NET MVC uygulamalarında web.config dosyasının customErrors
ve httpErrors
bölümleri arasındaki fark nedir ?
Her bir bölümü kullanma yönergeleri nelerdir?
ASP.NET MVC uygulamalarında web.config dosyasının customErrors
ve httpErrors
bölümleri arasındaki fark nedir ?
Her bir bölümü kullanma yönergeleri nelerdir?
Yanıtlar:
Feragatname: Bu benim deneyimimden ve kanıtlanmış bir gerçek değil.
Her ikisi de bir web sitesi için hata işlemeyi tanımlamak için kullanılır, ancak farklı yazılımlar farklı yapılandırma öğelerini ifade eder.
customErrors
Visual Studio Development Server (diğer adıyla VSDS veya Cassini) tarafından kullanılan eski (geriye doğru karşılaştırılabilir) bir öğedir.
httpErrors
yalnızca IIS7 tarafından kullanılan yeni öğedir.
Bu , yerel IIS yerine VSDS kullanırken ASP.NET web siteleri geliştirilirken ortaya çıkabilecek olası sorunu vurgular .
Ayrıca, hata çıktısı üzerinde tam denetime sahip olmak istiyorsanız, IIS7 ile hata iletilerinin nasıl işleneceğiyle ilgili bu gönderiye kendim bakın .
VSDS
kullanım -customErrors
IIS6
kullanım -customErrors
IIS7
kullanım - httpErrors
.ve eğer geliştirirseniz, VSDS
ancak yayınlarsanız IIS7
, sanırım ikisine de ihtiyacınız olacak.
* Nisan 2016'da güncellendi
CustomErrors özniteliği, .net kodu bir özel durum (404, 403, 500 vb.) Atarken kullanılır ve httpErrors özniteliği, IIS'nin kendisi bir özel durum atarken kullanılır.
Bunu doğru bir şekilde yapılandırmaya çalışan birçok tuzak var. Hızlı bir örnek arıyorsanız, sahip olduğunuz en iyi 2 seçenek:
Örnek 1: Html sayfalarını kullanma
<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>
Örnek 2: Aspx sayfalarını kullanma
<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>
Ve aspx hata sayfalarında böyle bir şey yapmanız gerekir (örnek 404 sayfası):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Not: customErrors bölümünde uzantı az URL kullanmak mümkün değildir! . (korsan olmadan)
Bir çözüm, özel hataları devre dışı bırakmak ve http hatalarının özel sayfayı işlemesine izin vermektir. Bir arkadaşım böyle bir kurulum yarattı, biraz zaman bulduğumda, kodu paylaşacağım.
Arka fon
İyi bir özel hata sayfası:
Bu nedenle, yapılandırmamızdaki bazı seçenekleri açıklığa kavuşturmak için:
<customErrors mode="RemoteOnly"
. Burada belirtebilirsiniz: On
, Off
, RemoteOnly
.
On
= Her zaman özel hata sayfalarını gösterOff
= Her zaman gerçek hatayı gösterRemoteOnly
= Hatayı yerel olarak göster, ancak özel hata sayfasını uzaktan göster. Yani RemoteOnly
ifade istiyoruz 1<customErrors redirectMode="ResponseRewrite"
. Burada belirtebilirsiniz: ResponseRedirect
veya ResponseRewrite
. ResponseRedirect
Mod özel hata sayfasına hata sayfası yönlendirir. Bir bağlantı tarayıcısı (SEO) için bu 302 -> 500 ile sonuçlanır, ancak bağlantı tarayıcısının 500 hatası almasını istersiniz.
<httpErrors errorMode="DetailedLocalOnly"
. Bu customErrors
modun eşdeğeri . Seçenekler sahip olduğunuz: Custom
, Detailed
, DetailedLocalOnly
.
Bana çok yardımcı olan iyi bir blog yazısı: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
karşı <httpErrors>
<customErrors>
<httpErrors>
Not: artık kullanmak gerekli değildir
customErrors
Alıntılanan kaynak: Özel 404 ve ASP.NET'teki hata sayfaları (mükemmel makale)
ExecuteURL
bir .aspx sayfası gibi dinamik içerik sunar ( path
değerin sunucuya göre bir URL olması gerekir ):
<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 sayfası gibi özel bir hata dosyası sunar:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
Referans: HTTP Hataları (www.iis.net)
daha fazla ayrıntı için yukarıdaki www.iis.net bağlantısını okuyun
it's no loger necesary to use customErrors
ve alıntı için +1 , bu gerçekten :-) sonra olduğum bilgi
Web config'teki hatalar bölümü, özel http hata işleme yaklaşımını sağlamak içindir, iki bölüm vardır, bir bölüm system.web içinde customErrors ve bölüm system.webServer içinde başka bir httpErrors (aşağıda verildiği gibi)
customErrors: Bu bölüm, IIS 7 kullanılmadan önce, IIS 6 5 ve http durum koduna göre özel http hatalarını işlemek için bu bölümü tam olarak kullanmadan önce kullanılıyordu.
httpErrors: IIS 7 ve üstü , index.aspx gibi ISAPI dll (.aspx, ashx, .asmx, .svc vb.) ile istenen sayfa uzantısı kaydı varsa, dosya uzantılarına göre özel http hatalarını işlemek için bu bölümü ve customErrors bölümünü kullanır. IIS ayarını pick up customeErrors aksi takdirde ayarını pick up bölümünde httpErrors (7 barındırılan modu entegre ruh klasik olarak değil ayarlanması gerekir IIS)
404 hata işleme kontrol bağlantısı için örnekler aşağıdadır: