Lebih
ASP.NET MVC 404 Error Handling
Mungkin Duplikat: Bagaimana saya bisa benar menangani 404 di ASP.NET MVC?
I've membuat perubahan yang diuraikan di https://stackoverflow.com/questions/108813/404-http-error-handler-in-aspnet-mvc-rc-5 dan saya'm masih mendapatkan standar error 404 halaman. Apakah saya perlu mengubah sesuatu di IIS?
129
6
I've diselidiki BANYAK bagaimana untuk benar mengelola 404s di MVC (khusus MVC3), dan ini, IMHO adalah solusi terbaik saya've datang dengan:
Di global.asax:
ErrorsController:
Edit:
Jika anda're menggunakan IoC (misalnya AutoFac), anda harus membuat controller menggunakan:
Bukan
(Opsional)
Penjelasan:
Ada 6 skenario yang saya bisa memikirkan mana yang ASP.NET MVC3 aplikasi dapat menghasilkan 404.
Yang dihasilkan oleh ASP.NET:
Yang dihasilkan oleh ASP.NET MVC:
Skenario 2: URL pertandingan rute, tapi menentukan controller yang doesn't ada.
Skenario 3: URL pertandingan rute, tapi menentukan sebuah tindakan yang doesn't ada.
Manual yang dihasilkan:
Skenario 4: An aksi kembali sebuah HttpNotFoundResult dengan menggunakan metode HttpNotFound().
Skenario 5: tindakan melempar HttpException dengan kode status 404.
Skenario 6: Sebuah tindakan manual memodifikasi Respon.StatusCode properti untuk 404.
Tujuan
(Pusat) Menunjukkan custom halaman error 404 untuk pengguna.
(B) Menjaga kode status 404 pada respon klien (khususnya penting untuk SEO).
(C) Kirim tanggapan secara langsung, tanpa melibatkan 302 pengalihan.
Solusi Usaha: Kesalahan Kustom
Masalah dengan solusi ini:
Solusi Usaha: HTTP Kesalahan
Masalah dengan solusi ini:
Solusi Usaha: HTTP Kesalahan dengan Mengganti
Masalah dengan solusi ini:
Solusi Upaya customErrors dan HTTP Kesalahan
dan
Masalah dengan solusi ini:
Orang-orang yang bermasalah dengan hal ini bahkan sebelum mencoba untuk membuat perpustakaan sendiri (lihat http://aboutcode.net/2011/02/26/handling-not-found-with-asp-net-mvc3.html). Tapi sebelumnya solusi tampaknya untuk menutupi semua skenario tanpa kompleksitas menggunakan perpustakaan eksternal.
Namun solusi lain.
Tambahkan ErrorControllers atau halaman statis dengan 404 kesalahan informasi.
Memodifikasi web anda.config (dalam kasus controller).
Atau dalam kasus halaman statis
Ini akan menangani kedua terjawab rute dan tindakan tidak terjawab.
Respon dari Marco adalah solusi TERBAIK. Saya perlu untuk mengontrol kesalahan penanganan, dan maksud saya benar-benar mengendalikannya. Tentu saja, saya telah diperpanjang solusi sedikit dan dibuat penuh kesalahan sistem manajemen yang mengelola segala sesuatu. Saya juga membaca tentang solusi ini di blog lain dan tampaknya sangat dapat diterima oleh sebagian besar pengembang maju.
Berikut ini adalah kode akhir yang saya gunakan:
dan di dalam saya ErrorManagerController :
Sekarang, dalam Tindakan saya, saya melemparkan Pengecualian Kustom yang saya telah dibuat. Dan saya Controller adalah pewarisan dari custom Controller Berbasis kelas yang saya telah dibuat. Custom Base Controller diciptakan untuk mengesampingkan penanganan kesalahan. Berikut ini adalah kebiasaan saya Dasar kelas Controller:
"ErrorManager" pada kode diatas adalah sekedar tampilan yang menggunakan Model yang didasarkan pada ExceptionContext
Solusi saya bekerja sempurna dan saya mampu menangani SETIAP error yang terjadi pada website saya dan menampilkan pesan yang berbeda berdasarkan pada SETIAP jenis pengecualian.
Sepertinya ini adalah cara terbaik untuk menangkap semuanya.
https://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc
Di IIS, anda dapat menentukan redirect ke "tertentu" di halaman berdasarkan kode kesalahan. Di anda contoh, anda dapat mengkonfigurasi 404 - > Anda disesuaikan 404 error page.
Apa yang bisa saya rekomendasikan adalah dengan melihat pada FilterAttribute. Misalnya MVC sudah memiliki HandleErrorAttribute. Anda dapat menyesuaikannya untuk menangani hanya 404. Balasan jika anda loi saya akan melihat contoh.
BTW
Solusi(dengan rute terakhir) bahwa anda telah diterima di pertanyaan sebelumnya tidak bekerja di banyak situasi. Solusi kedua dengan HandleUnknownAction akan bekerja tetapi membutuhkan untuk membuat perubahan ini dalam setiap controller atau untuk memiliki satu dasar controller.
Pilihan saya adalah larutan dengan HandleUnknownAction.