Apa perbedaan antara bagian customErrors
dan httpErrors
file web.config dalam aplikasi ASP.NET MVC?
Apa pedoman untuk menggunakan setiap bagian?
Apa perbedaan antara bagian customErrors
dan httpErrors
file web.config dalam aplikasi ASP.NET MVC?
Apa pedoman untuk menggunakan setiap bagian?
Jawaban:
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.
VSDS
digunakancustomErrors
IIS6
digunakancustomErrors
IIS7
digunakan httpErrors
.dan jika Anda berkembang dengan VSDS
tetapi menerbitkan IIS7
, maka saya kira Anda akan membutuhkan keduanya.
* Diperbarui April 2016
Atribut customErrors digunakan ketika kode .net melempar pengecualian (404, 403, 500 dll) dan atribut httpErrors digunakan ketika IIS sendiri melempar pengecualian.
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:
Jadi untuk memperjelas beberapa opsi dalam konfigurasi kami:
<customErrors mode="RemoteOnly"
. Anda dapat menentukan sini: On
, Off
, RemoteOnly
.
On
= Selalu tampilkan halaman kesalahan khususOff
= Selalu menunjukkan kesalahan nyataRemoteOnly
= Tampilkan kesalahan secara lokal, tetapi tampilkan halaman kesalahan khusus dari jarak jauh. Jadi kami ingin RemoteOnly
untuk pernyataan 1<customErrors redirectMode="ResponseRewrite"
. Anda dapat menentukan di sini: ResponseRedirect
atau ResponseRewrite
. The ResponseRedirect
modus 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.
<httpErrors errorMode="DetailedLocalOnly"
. Ini setara dengan customErrors
mode. Pilihan yang Anda miliki: Custom
, Detailed
, DetailedLocalOnly
.
Posting blog bagus yang banyak membantu saya adalah: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
melawan <httpErrors>
<customErrors>
<httpErrors>
Catatan: tidak perlu lagi digunakan
customErrors
Sumber kutipan: Kustom 404 dan halaman kesalahan di ASP.NET (artikel bagus)
ExecuteURL
menyajikan konten dinamis seperti halaman .aspx ( path
nilainya 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
it's no loger necesary to use customErrors
dan kutipan, ini benar-benar info yang saya cari :-)
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: