CustomErrors ve httpErrors arasındaki fark nedir?


168

ASP.NET MVC uygulamalarında web.config dosyasının customErrorsve httpErrorsbölümleri arasındaki fark nedir ?

Her bir bölümü kullanma yönergeleri nelerdir?


1
IMHO - HttpError hata iletileri için IIS düzeyinde işlem yaparken, CustomError web uygulamasındaki hatalar için ASP.Net işlemidir. Ama daha fazlasını bilmek isterdim ...
Sunny

Yanıtlar:


85

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 .

Özet:

  • Gelişmekte VSDSkullanım -customErrors
  • Site yayınlama IIS6kullanım -customErrors
  • Site yayınlama IIS7kullanım - httpErrors.

ve eğer geliştirirseniz, VSDSancak yayınlarsanız IIS7, sanırım ikisine de ihtiyacınız olacak.


30
customErrors asp.net içindir. httpErrors IIS7 içindir ve bu nedenle .net işleyicisinden geçmeyen içeriği işleyin (örn. .png, .js vb.) .net olmayan içerik türleri için hata sayfaları istiyorsanız, IIS hata sayfalarını (IIS7 için httpErrors) kullanın , IIS6 için kullanıcı arayüzü.)
zcrar70

4
Hata ayıklama amacıyla IIS 7 Express'i Visual Studio ile yüklemenizi ve kullanmanızı öneririm. Cassini'den farklı olarak, normal IIS 7 ile aynı yapılandırma seçeneklerini kullanacaktır.
Sean

@johnB tarafından customErrors kullanmak artık gerekli değildir. Ve çok mu gerekli? 1.) "ASP" bölümünde "Tarayıcıya Hata Gönder" i etkinleştirin. Hata Ayıklama Özellikleri 2.) "Hata Sayfaları / Özellik Ayarlarını Düzenle" altında, "Ayrıntılı hatalar" ı seçin. 3.) IE'de "Kolay HTTP hata mesajlarını göster" seçeneğini devre dışı
bırakın

136

* 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.

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

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ı:

  1. Sorun sayfasını yerel olarak ziyaret ettiğinizde gerçek istisnayı gösterin
  2. Sorunlu sayfayı uzaktan ziyaret ettiğinizde özel bir sayfa gösterin
  3. Yönlendirilmez, ancak yalnızca hata sayfası içeriğini gösterir (seo nedenlerinden dolayı)
  4. Doğru durum kodunu gösterecek

Bu nedenle, yapılandırmamızdaki bazı seçenekleri açıklığa kavuşturmak için:

  1. <customErrors mode="RemoteOnly". Burada belirtebilirsiniz: On, Off, RemoteOnly.

    • On = Her zaman özel hata sayfalarını göster
    • Off = Her zaman gerçek hatayı göster
    • RemoteOnly= Hatayı yerel olarak göster, ancak özel hata sayfasını uzaktan göster. Yani RemoteOnlyifade istiyoruz 1
  2. <customErrors redirectMode="ResponseRewrite". Burada belirtebilirsiniz: ResponseRedirectveya ResponseRewrite. ResponseRedirectMod ö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.

  3. <httpErrors errorMode="DetailedLocalOnly". Bu customErrorsmodun 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


Ne tür bir ilişki customErrors - httpErrors ve IIS yapılandırması ASP'de "Tarayıcıya Hata Gönder" - Hata Ayıklama Özellikleri ve "Hata Sayfaları / Özellik Ayarlarını Düzenle", "Ayrıntılı hatalar" gibi. ? stackoverflow.com/questions/2640526/…
Kiquenet

36

<customErrors> karşı <httpErrors>


<customErrors>

  • IIS7 + 'da hala kullanılabilir
  • ASP.NET tarafından işlenen istekler için özel hata sayfaları belirtme
  • yalnızca ASP.NET uygulamasındaki istekleri işler
  • HTML dosyaları veya dizin (“kolay”) URL'ler gibi statik dosyalar işlenmez

<httpErrors>

  • IIS7'de tanıtıldı
  • IIS tarafından işlenen istekler için özel hata sayfaları belirleme
  • ASP.NET uygulaması içindeki istekleri ve / VEYA - ASP.NET uygulaması dışındaki istekleri işler *
  • tüm dosyalar ve URL'ler işlenir *

Not: artık kullanmak gerekli değildir customErrors

Alıntılanan kaynak: Özel 404 ve ASP.NET'teki hata sayfaları (mükemmel makale)


ExecuteURLbir .aspx sayfası gibi dinamik içerik sunar ( pathdeğ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


Belki kullanışlı ** stackoverflow.com/questions/2640526/... ** birleştirirseniz httpErrors ile "Tarayıcı için Gönder Hataları" ve Hata Sayfaları
Kiquenet

3
Not it's no loger necesary to use customErrorsve alıntı için +1 , bu gerçekten :-) sonra olduğum bilgi
Myster

4

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:

webconfig, iis, asp.net sitesindeki httperrors vs customerrors

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.