Apa perbedaan antara customErrors dan httpErrors?

168

Apa perbedaan antara bagian customErrorsdan httpErrorsfile web.config dalam aplikasi ASP.NET MVC?

Apa pedoman untuk menggunakan setiap bagian?

Alan T
sumber
1
IMHO - HttpError adalah penanganan tingkat IIS untuk pesan kesalahan sementara CustomError adalah ASP.Net menangani kesalahan dalam aplikasi web. Tapi ingin tahu lebih banyak ...
Sunny

Jawaban:

85

Penafian: Ini dari pengalaman saya dan bukan fakta yang terbukti.

Keduanya digunakan untuk mendefinisikan penanganan kesalahan untuk suatu situs web, tetapi perangkat lunak yang berbeda merujuk pada elemen konfigurasi yang berbeda.

customErrors adalah elemen legacy (backwards compatable), yang digunakan oleh Visual Studio Development Server (alias. VSDS atau Cassini).

httpErrors adalah elemen baru yang hanya digunakan oleh IIS7.

Ini menyoroti masalah yang mungkin terjadi ketika mengembangkan situs web ASP.NET saat menggunakan VSDS, bukan IIS lokal.

Juga, lihat posting ini sendiri tentang bagaimana menangani pesan kesalahan dengan IIS7, jika Anda ingin memiliki kontrol penuh terhadap output kesalahan.

Ringkasan:

  • Berkembang sedang VSDSdigunakancustomErrors
  • Menerbitkan situs yang akan IIS6digunakancustomErrors
  • Menerbitkan situs yang akan IIS7digunakan httpErrors.

dan jika Anda berkembang dengan VSDStetapi menerbitkan IIS7, maka saya kira Anda akan membutuhkan keduanya.

Murni
sumber
30
customErrors untuk asp.net. httpErrors untuk IIS7, dan karenanya menangani konten yang tidak melalui penangan .net (mis. png, .js dll.) Jika Anda menginginkan halaman kesalahan untuk jenis konten non -.net, gunakan halaman kesalahan IIS (httpErrors untuk IIS7 , UI untuk IIS6.)
zcrar70
4
Saya sarankan menginstal dan menggunakan IIS 7 Express dengan Visual Studio untuk keperluan debugging. Ini akan menggunakan opsi konfigurasi yang sama dengan IIS 7 biasa, tidak seperti Cassini.
Sean
tidak perlu lagi menggunakan customErrors oleh @johnB. Dan terlalu penting? 1.) aktifkan "Kirim Kesalahan ke Browser" di bawah bagian "ASP". Properti Debugging 2.) di bawah "Halaman Kesalahan / Edit Pengaturan Fitur", pilih "Kesalahan terperinci". 3.) nonaktifkan "Tampilkan pesan kesalahan HTTP ramah" di IE stackoverflow.com/questions/2640526/…
Kiquenet
136

* Diperbarui April 2016

Atribut customErrors digunakan ketika kode .net melempar pengecualian (404, 403, 500 dll) dan atribut httpErrors digunakan ketika IIS sendiri melempar pengecualian.

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

Ada banyak jebakan mencoba mengkonfigurasi ini dengan benar. Jadi jika Anda mencari contoh cepat, 2 opsi terbaik yang Anda miliki adalah:

Contoh 1: Menggunakan halaman 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>

Contoh 2: menggunakan halaman 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>

Dan di halaman kesalahan aspx Anda perlu melakukan sesuatu seperti ini (contoh halaman 404):

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

Catatan: Menggunakan sedikit ekstensi url di bagian customErrors tidak dimungkinkan! . (tanpa peretasan)

Salah satu penyelesaiannya adalah untuk menonaktifkan kesalahan khusus dan membiarkan kesalahan http menangani halaman kustom. Seorang teman telah membuat pengaturan seperti itu, ketika saya menemukan waktu, saya akan membagikan kodenya.

Latar Belakang

Halaman kesalahan khusus yang baik akan:

  1. Tampilkan pengecualian nyata ketika Anda mengunjungi halaman masalah secara lokal
  2. Tampilkan halaman khusus ketika Anda mengunjungi halaman masalah dari jarak jauh
  3. Tidak akan mengarahkan, tetapi hanya menampilkan konten halaman kesalahan (karena alasan tertentu)
  4. Akan menampilkan kode status yang benar

Jadi untuk memperjelas beberapa opsi dalam konfigurasi kami:

  1. <customErrors mode="RemoteOnly". Anda dapat menentukan sini: On, Off, RemoteOnly.

    • On = Selalu tampilkan halaman kesalahan khusus
    • Off = Selalu menunjukkan kesalahan nyata
    • RemoteOnly= Tampilkan kesalahan secara lokal, tetapi tampilkan halaman kesalahan khusus dari jarak jauh. Jadi kami ingin RemoteOnlyuntuk pernyataan 1
  2. <customErrors redirectMode="ResponseRewrite". Anda dapat menentukan di sini: ResponseRedirectatau ResponseRewrite. The ResponseRedirectmodus akan mengarahkan halaman kesalahan ke halaman kesalahan kustom. Untuk perayap tautan (SEO), ini akan menghasilkan 302 -> 500, tetapi Anda ingin perayap tautan mendapatkan 500 kesalahan.

  3. <httpErrors errorMode="DetailedLocalOnly". Ini setara dengan customErrorsmode. Pilihan yang Anda miliki: Custom, Detailed, DetailedLocalOnly.

Posting blog bagus yang banyak membantu saya adalah: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

Maarten Kieft
sumber
Apa hubungan customErrors - httpErrors dan konfigurasi IIS seperti "Kirim Kesalahan ke Browser" di ASP - Properti Debugging dan "Halaman Kesalahan / Edit Pengaturan Fitur", "Kesalahan terperinci". ? stackoverflow.com/questions/2640526/…
Kiquenet
36

<customErrors> melawan <httpErrors>


<customErrors>

  • masih tersedia di IIS7 +
  • tentukan halaman kesalahan khusus untuk permintaan yang ditangani oleh ASP.NET
  • hanya menangani permintaan dalam aplikasi ASP.NET
  • file statis seperti file HTML atau direktori ("ramah") URL tidak ditangani

<httpErrors>

  • diperkenalkan di IIS7
  • tentukan halaman kesalahan khusus untuk permintaan yang ditangani oleh IIS
  • menangani permintaan dalam aplikasi ASP.NET DAN / ATAU menangani permintaan di luar - aplikasi ASP.NET *
  • semua file dan URL ditangani *

Catatan: tidak perlu lagi digunakan customErrors

Sumber kutipan: Kustom 404 dan halaman kesalahan di ASP.NET (artikel bagus)


ExecuteURLmenyajikan konten dinamis seperti halaman .aspx ( pathnilainya harus URL relatif server ):

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

File melayani file kesalahan khusus, seperti halaman .html:

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

Referensi: Kesalahan HTTP (www.iis.net)

untuk lebih jelasnya, baca tautan www.iis.net di atas

JohnB
sumber
Mungkin berguna ** stackoverflow.com/questions/2640526/... ** jika menggabungkan httpErrors dengan "Kirim Kesalahan ke Browser" dan Halaman Kesalahan
Kiquenet
3
+1 untuk catatan it's no loger necesary to use customErrorsdan kutipan, ini benar-benar info yang saya cari :-)
Myster
4

Bagian kesalahan dalam konfigurasi web adalah untuk menyediakan pendekatan penanganan kesalahan http kustom ada dua bagian, satu customErrors di dalam bagian system.web dan satu lagi httpErrors di dalam bagian system.webServer (seperti yang diberikan di bawah ini)

customErrors: Bagian ini digunakan sebelum IIS 7 diperkenalkan, IIS 6 5 dan sebelum sepenuhnya menggunakan bagian ini untuk menangani kesalahan http kustom sesuai dengan kode status http.

httpErrors: IIS 7 dan kemudian menggunakan bagian ini serta bagian customErrors untuk menangani kesalahan http kustom berdasarkan ekstensi file mereka jika diminta ekstensi halaman mendaftar dengan ISAPI dll (.aspx, ashx, .asmx, .svc dll) seperti index.aspx lalu Pengaturan pengambilan IIS dari bagian customeErrors kalau tidak, pengaturan pengambilan dari httpErrors (mode yang dihosting IIS 7 harus diatur sebagai suasana hati yang terintegrasi bukan klasik)

di bawah ini adalah contoh untuk 404 tautan cek penanganan kesalahan:

httperrors vs customerrors di webconfig, iis, asp.net

Rohit
sumber