Saya menggunakan RC2
Menggunakan Routing URL:
routes.MapRoute(
"Error",
"{*url}",
new { controller = "Errors", action = "NotFound" } // 404s
);
Hal di atas tampaknya menangani permintaan seperti ini (dengan asumsi pengaturan tabel rute default oleh proyek MVC awal): "/ bla / bla / bla / bla"
Mengganti HandleUnknownAction () di controller itu sendiri:
// 404s - handle here (bad action requested
protected override void HandleUnknownAction(string actionName) {
ViewData["actionName"] = actionName;
View("NotFound").ExecuteResult(this.ControllerContext);
}
Namun strategi sebelumnya tidak menangani permintaan ke pengontrol Buruk / Tidak Dikenal. Sebagai contoh, saya tidak memiliki "/ IDoNotExist", jika saya meminta ini saya mendapatkan halaman 404 generik dari server web dan bukan 404 saya jika saya menggunakan routing + override.
Jadi akhirnya, pertanyaan saya adalah: Apakah ada cara untuk menangkap jenis permintaan ini menggunakan rute atau sesuatu yang lain dalam kerangka kerja MVC itu sendiri?
ATAU haruskah saya default menggunakan Web.Config customErrors sebagai penangan 404 saya dan melupakan semua ini? Saya berasumsi jika saya menggunakan customErrors saya harus menyimpan halaman 404 generik di luar / Tampilan karena pembatasan Web.Config pada akses langsung.
Jawaban:
Kode ini diambil dari http://blogs.microsoft.co.il/blogs/shay/archive/2009/03/06/real-world-error-hadnling-in-asp-net-mvc-rc2.aspx dan bekerja di ASP.net MVC 1.0 juga
Inilah cara saya menangani pengecualian http:
sumber
Persyaratan untuk 404
Berikut ini adalah persyaratan saya untuk solusi 404 dan di bawah ini saya menunjukkan bagaimana saya menerapkannya:
Larutan
Saya pikir Anda harus menyimpan
Application_Error
di Global.asax untuk hal-hal yang lebih tinggi, seperti pengecualian dan penebangan yang tidak ditangani (seperti yang ditunjukkan oleh jawaban Shay Jacoby ) tetapi bukan penanganan 404. Inilah sebabnya mengapa saran saya menjaga 404 hal dari file Global.asax.Langkah 1: Memiliki tempat umum untuk logika 404-kesalahan
Ini adalah ide yang bagus untuk pemeliharaan. Gunakan ErrorController sehingga peningkatan di masa depan untuk halaman 404 Anda yang dirancang dengan baik dapat beradaptasi dengan mudah. Juga, pastikan respons Anda memiliki kode 404 !
Langkah 2: Gunakan kelas Pengontrol dasar sehingga Anda dapat dengan mudah memanggil tindakan kustom Anda dan memasang
HandleUnknownAction
404-an dalam ASP.NET MVC perlu ditangkap di sejumlah tempat. Yang pertama adalah
HandleUnknownAction
.The
InvokeHttp404
Metode menciptakan tempat umum untuk re-routing keErrorController
dan baruHttp404
bertindak. Pikirkan KERING !Langkah 3: Gunakan Injeksi Ketergantungan di Pabrik Pengontrol Anda dan pasang 404 HttpExceptions
Seperti itu (tidak harus StructureMap):
Contoh MVC1.0:
Contoh MVC2.0:
Saya pikir lebih baik untuk menangkap kesalahan lebih dekat ke tempat asalnya. Inilah mengapa saya lebih suka yang diatas untuk yang
Application_Error
handler.Ini adalah tempat kedua untuk menangkap 404s.
Langkah 4: Tambahkan rute NotFound ke Global.asax untuk url yang gagal diuraikan ke dalam aplikasi Anda
Rute ini harus mengarah ke
Http404
tindakan kita . Perhatikanurl
param akan menjadi url relatif karena mesin perutean melucuti bagian domain di sini? Itulah mengapa kita memiliki semua logika url bersyarat pada Langkah 1.Ini adalah tempat ketiga dan terakhir untuk menangkap 404s dalam aplikasi MVC yang tidak Anda gunakan sendiri. Jika Anda tidak menangkap rute yang tidak cocok di sini, maka MVC akan meneruskan masalahnya ke ASP.NET (Global.asax) dan Anda tidak benar-benar menginginkan hal itu dalam situasi ini.
Langkah 5: Akhirnya, aktifkan 404 ketika aplikasi Anda tidak dapat menemukan sesuatu
Seperti ketika ID buruk dikirimkan ke pengontrol Pinjaman saya (berasal dari
MyController
):Akan lebih baik jika semua ini dapat dihubungkan di tempat yang lebih sedikit dengan kode lebih sedikit tetapi saya pikir solusi ini lebih mudah dikelola, lebih dapat diuji dan cukup pragmatis.
Terima kasih atas responnya sejauh ini. Saya ingin mendapatkan lebih banyak.
CATATAN: Ini telah diedit secara signifikan dari jawaban asli saya tetapi tujuan / persyaratannya sama - ini sebabnya saya belum menambahkan jawaban baru
sumber
customErrors
Bagian dari web.config mendefinisikan halaman redirect statis yang ditangani pada tingkat tinggi di aspnet jika bukan IIS. Ini bukan yang saya inginkan karena saya harus memiliki hasil menjadi MVC Views (jadi saya dapat memiliki data di dalamnya dll). Saya tidak akan mengatakan dengan tegas bahwa "customErrors
sudah usang dalam MVC" tetapi bagi saya dan solusi 404 ini mereka tentu saja.ObjectFactory.GetInstance
ke MVC3DependencyResolver.Current.GetService
sebagai gantinya jadi lebih umum. Saya menggunakan Ninject.ASP.NET MVC tidak mendukung 404 halaman kustom dengan sangat baik. Pabrik pengontrol khusus, rute tangkap semua, dengan kelas pengontrol basis
HandleUnknownAction
- argh!Sejauh ini halaman kesalahan khusus IIS adalah alternatif yang lebih baik:
web.config
ErrorController
Proyek Sampel
sumber
customErrors mode="On"
bersama denganHandleErrorAttribute
menjadi fungsional. Halaman kesalahan khusus untuk pengecualian yang tidak ditangani dalam tindakan pengontrol tidak dilayani lagi.Jawaban Cepat / TL; DR
Untuk orang-orang malas di luar sana:
Kemudian hapus baris ini dari
global.asax
Dan ini hanya untuk IIS7 + dan IIS Express.
Jika Anda menggunakan Cassini .. well .. um .. er .. canggung ...
Panjang, jawaban yang dijelaskan
Saya tahu ini telah dijawab. Tetapi jawabannya SANGAT SEDERHANA (sorakan kepada David Fowler dan Damian Edwards untuk benar-benar menjawab ini).
Tidak perlu melakukan kebiasaan apa pun .
Untuk
ASP.NET MVC3
, semua potongan ada di sana.Langkah 1 -> Perbarui web.config Anda di DUA tempat.
dan
Sekarang perhatikan ROUTES yang telah saya putuskan untuk digunakan. Anda dapat menggunakan apa saja, tetapi rute saya
/NotFound
<- untuk halaman 404 tidak ditemukan, halaman kesalahan./ServerError
<- untuk kesalahan lain, sertakan kesalahan yang terjadi pada kode saya. ini adalah 500 Server Internal KesalahanLihat bagaimana bagian pertama
<system.web>
hanya memiliki satu entri khusus? ThestatusCode="404"
entri? Saya hanya mencantumkan satu kode status karena semua kesalahan lainnya, termasuk500 Server Error
(mis. Kesalahan sial yang terjadi ketika kode Anda memiliki bug dan crash permintaan pengguna) .. semua kesalahan lainnya ditangani oleh pengaturandefaultRedirect="/ServerError"
.. yang mengatakan , jika Anda bukan halaman 404 tidak ditemukan, maka silakan kebagian rute/ServerError
.Baik. itu keluar dari jalan .. sekarang ke rute saya terdaftar di
global.asax
Langkah 2 - Membuat rute di Global.asax
Inilah bagian rute lengkap saya ..
Itu mencantumkan dua rute abaikan ->
axd's
danfavicons
(ooo! Bonus abaikan rute, untuk Anda!) Lalu (dan urutannya IMPERATIF DI SINI), saya memiliki dua rute penanganan kesalahan yang eksplisit .. diikuti oleh rute lainnya. Dalam hal ini, yang standar. Tentu saja, saya punya lebih banyak, tetapi itu khusus untuk situs web saya. Pastikan rute kesalahan ada di bagian atas daftar. Ketertiban sangat penting .Akhirnya, sementara kita berada di dalam kita
global.asax
file kita, kita TIDAK mendaftarkan atribut HandleError secara global. Tidak, tidak, tidak, tuan. Nadda. Nggak. Nien. Negatif. Tidaaaaaak ...Hapus baris ini dari
global.asax
Langkah 3 - Buat controller dengan metode tindakan
Sekarang .. kita tambahkan controller dengan dua metode aksi ...
Ok, mari kita periksa ini. Pertama-tama, tidak ada
[HandleError]
atribut di sini. Mengapa? Karena built inASP.NET
kerangka kerja bawaan sudah menangani kesalahan DAN kami telah menentukan semua omong kosong yang perlu kami lakukan untuk menangani kesalahan :) Ada dalam metode ini!Selanjutnya, saya memiliki dua metode tindakan. Tidak ada yang sulit di sana. Jika Anda ingin menampilkan info pengecualian, maka Anda dapat menggunakannya
Server.GetLastError()
untuk mendapatkan info itu.Bonus WTF: Ya, saya membuat metode tindakan ketiga, untuk menguji penanganan kesalahan.
Langkah 4 - Buat Views
Dan akhirnya, buat dua tampilan. Tempatkan mereka di tempat tampilan normal, untuk pengontrol ini.
Komentar bonus
Application_Error(object sender, EventArgs e)
Dan itu, teman-teman saya, seharusnya begitu.
Sekarang, selamat telah membaca sebanyak ini dan dapatkan Unicorn sebagai hadiah!
sumber
?aspxerrorpath=/er/not/found
ada di url.Saya telah menyelidiki BANYAK tentang cara mengelola 404 dengan benar di MVC (khususnya MVC3) , dan ini, IMHO adalah solusi terbaik yang saya buat:
Di global.asax:
ErrorsController:
(Pilihan)
Penjelasan:
AFAIK, ada 6 kasus berbeda yang dapat dihasilkan oleh aplikasi ASP.NET MVC3 404s.
(Secara otomatis dihasilkan oleh ASP.NET Framework :)
(1) URL tidak menemukan kecocokan di tabel rute.
(Secara otomatis dihasilkan oleh ASP.NET MVC Framework :)
(2) URL menemukan kecocokan dalam tabel rute, tetapi menentukan pengontrol yang tidak ada.
(3) URL menemukan kecocokan di tabel rute, tetapi menentukan tindakan yang tidak ada.
(Dibuat secara manual :)
(4) Suatu tindakan mengembalikan HttpNotFoundResult dengan menggunakan metode HttpNotFound ().
(5) Suatu tindakan melempar HttpException dengan kode status 404.
(6) Suatu tindakan secara manual memodifikasi properti Response.StatusCode ke 404.
Biasanya, Anda ingin mencapai 3 tujuan:
(1) Tampilkan halaman kesalahan 404 khusus untuk pengguna.
(2) Pertahankan kode status 404 pada respons klien (khusus penting untuk SEO).
(3) Kirim tanggapan secara langsung, tanpa melibatkan pengalihan 302.
Ada berbagai cara untuk mencapai hal ini:
(1)
Masalah dengan solusi ini:
(2)
Masalah dengan solusi ini:
(3)
Masalah dengan solusi ini:
(4)
dan
Masalah dengan solusi ini:
Orang-orang yang bermasalah dengan ini sebelumnya bahkan mencoba membuat perpustakaan mereka sendiri (lihat http://aboutcode.net/2011/02/26/handling-not-found-with-asp-net-mvc3.html ). Tetapi solusi sebelumnya tampaknya mencakup semua kasus tanpa kerumitan menggunakan perpustakaan eksternal.
sumber
public ActionResult NotFound() {}
di ErrorsController Anda. Juga, dapatkah Anda menjelaskan_NotFound
seperti apa tampilan parsial Anda untuk permintaan AJAX?MissingMethodException: Cannot create an abstract class
terhubung.c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
Ada ide?Saya sangat suka solusi cottsaks dan berpikir dengan sangat jelas. Satu-satunya tambahan saya adalah mengubah langkah 2 sebagai berikut
Pada dasarnya ini berhenti url berisi tindakan yang tidak valid dan pengontrol memicu rutin pengecualian dua kali. misalnya untuk url seperti asdfsdf / dfgdfgd
sumber
Satu-satunya cara saya bisa mendapatkan metode @ cottsak untuk bekerja untuk pengontrol yang tidak valid adalah dengan memodifikasi permintaan rute yang ada di CustomControllerFactory, seperti:
Saya harus menyebutkan saya menggunakan MVC 2.0.
sumber
Berikut adalah metode lain menggunakan alat MVC yang Anda dapat menangani permintaan untuk nama pengontrol yang buruk, nama rute yang buruk, dan kriteria lain yang Anda anggap cocok di dalam metode Action. Secara pribadi, saya lebih suka menghindari pengaturan web.config sebanyak mungkin, karena mereka melakukan redirect 302/200 dan tidak mendukung ResponseRewrite (
Server.Transfer
) menggunakan tampilan Razor. Saya lebih suka mengembalikan 404 dengan halaman kesalahan khusus untuk alasan SEO.Beberapa di antaranya adalah teknik baru cottsak di atas.
Solusi ini juga menggunakan pengaturan web.config minimal yang mendukung Filter Kesalahan MVC 3.
Pemakaian
Hanya melempar HttpException dari suatu tindakan atau ActionFilterAttribute kustom.
Langkah 1
Tambahkan pengaturan berikut ke web.config Anda. Ini diperlukan untuk menggunakan HandleErrorAttribute MVC.
Langkah 2
Tambahkan kustom HandleHttpErrorAttribute mirip dengan HandleErrorAttribute kerangka kerja MVC, kecuali untuk kesalahan HTTP:
Langkah 3
Tambahkan Filter ke GlobalFilterCollection (
GlobalFilters.Filters
) diGlobal.asax
. Contoh ini akan merutekan semua kesalahan InternalServerError (500) ke tampilan Kesalahan bersama (Views/Shared/Error.vbhtml
). Kesalahan NotFound (404) akan dikirim ke ErrorHttp404.vbhtml juga dalam tampilan bersama. Saya telah menambahkan kesalahan 401 di sini untuk menunjukkan kepada Anda bagaimana ini dapat diperluas untuk kode kesalahan HTTP tambahan. Perhatikan bahwa ini harus dibagi pandangan, dan mereka semua menggunakanSystem.Web.Mvc.HandleErrorInfo
objek sebagai model.Langkah 4
Buat kelas pengontrol dasar dan mewarisinya dari pengontrol Anda. Langkah ini memungkinkan kami untuk menangani nama tindakan yang tidak dikenal dan meningkatkan kesalahan HTTP 404 ke HandleHttpErrorAttribute kami.
Langkah 5
Buat override ControllerFactory, dan override dalam file Global.asax Anda di Application_Start. Langkah ini memungkinkan kami untuk meningkatkan pengecualian HTTP 404 ketika nama pengontrol yang tidak valid telah ditentukan.
Langkah 6
Sertakan rute khusus di RoutTable Anda. Rute untuk aksi BaseController Tidak Diketahui. Ini akan membantu kami menaikkan 404 jika pengguna mengakses pengontrol yang tidak dikenal, atau tindakan yang tidak dikenal.
Ringkasan
Contoh ini menunjukkan bagaimana seseorang dapat menggunakan kerangka kerja MVC untuk mengembalikan 404 Kode Kesalahan Http ke browser tanpa pengalihan menggunakan atribut filter dan tampilan kesalahan bersama. Itu juga menunjukkan menampilkan halaman kesalahan khusus yang sama ketika nama pengontrol yang tidak valid dan nama tindakan ditentukan.
Saya akan menambahkan tangkapan layar dari nama pengontrol yang tidak valid, nama tindakan, dan custom 404 yang dimunculkan dari tindakan Home / TriggerNotFound jika saya mendapatkan cukup suara untuk memposting satu =). Fiddler mengembalikan pesan 404 ketika saya mengakses URL berikut menggunakan solusi ini:
posting cottsak di atas dan artikel ini adalah referensi yang bagus.
sumber
The IControllerFactory 'aaa.bbb.CustomControllerFactory' did not return a controller for the name '123'.
- ada ide mengapa saya mendapatkannya?Solusi singkat saya yang bekerja dengan area, pengendali, dan tindakan yang tidak tertangani:
Buat tampilan 404.cshtml.
Buat kelas dasar untuk pengontrol Anda:
Buat pabrik pengontrol khusus yang mengembalikan pengontrol dasar Anda sebagai cadangan:
Tambahkan ke
Application_Start()
baris berikut:sumber
Dalam MVC4 WebAPI 404 dapat ditangani dengan cara berikut,
APICONTROLLER KURSUS
KONTROLER RUMAH
MELIHAT
GLOBAL
HASIL
sumber
Coba NotFoundMVC di nuget. Berhasil, tidak ada pengaturan.
sumber
http://localhost/Views/Shared/NotFound.cshtml
tidak menghasilkan halaman 404 khusus.Solusi saya, kalau-kalau ada yang merasa berguna.
Di Web.config:
Dalam
Controllers/ErrorController.cs
:Tambahkan
PageNotFound.cshtml
dalamShared
folder, dan hanya itu.sumber
model.RequestedUrl = Request.Url.OriginalString.Contains(url) & Request.Url.OriginalString != url ? Request.Url.OriginalString : url;
dan bukanmodel.RequestedUrl = Request.Url.OriginalString.Contains(url) && Request.Url.OriginalString != url ? Request.Url.OriginalString : url;
(& bukan &&)?Sepertinya saya bahwa
CustomErrors
konfigurasi standar hanya akan berfungsi , karena ketergantungan padaServer.Transfer
tampaknya implementasi internalResponseRewrite
tidak kompatibel dengan MVC.Ini terasa seperti lubang fungsionalitas yang mencolok bagi saya, jadi saya memutuskan untuk mengimplementasikan kembali fitur ini menggunakan modul HTTP. Solusi di bawah ini memungkinkan Anda untuk menangani kode status HTTP apa pun (termasuk 404) dengan mengarahkan ulang ke rute MVC yang valid seperti yang akan Anda lakukan secara normal.
Ini telah diuji pada platform berikut;
Manfaat
Solusinya
Pemakaian
Sertakan ini sebagai modul HTTP final di web.config Anda
Bagi Anda yang memperhatikan, Anda akan melihat bahwa dalam mode Pipeline Terpadu ini akan selalu merespons dengan HTTP 200 karena cara
Server.TransferRequest
kerjanya. Untuk mengembalikan kode kesalahan yang tepat saya menggunakan pengontrol kesalahan berikut.sumber
Berurusan dengan kesalahan dalam ASP.NET MVC hanya menyebalkan. Saya mencoba banyak saran di halaman ini dan pada pertanyaan dan situs lain dan tidak ada yang berhasil. Satu saran adalah untuk menangani kesalahan pada web.config di dalam system.webserver tetapi itu hanya mengembalikan halaman kosong .
Tujuan saya ketika datang dengan solusi ini adalah untuk;
Ini solusinya.
1 .Add berikut untuk system.web bagian
Di atas menangani url apa pun yang tidak ditangani oleh route.config dan pengecualian tidak tertangani terutama yang ditemui pada tampilan. Perhatikan saya menggunakan aspx bukan html . Ini agar saya dapat menambahkan kode respons pada kode di belakang.
2 . Buat folder bernama Kesalahan (atau apa pun yang Anda inginkan) di root proyek Anda dan tambahkan dua bentuk web. Di bawah ini adalah halaman 404 saya;
Dan pada kode di belakang saya mengatur kode respons
Lakukan hal yang sama untuk halaman 500
3. Untuk menangani kesalahan dalam pengontrol. Ada banyak cara untuk melakukannya. Inilah yang bekerja untuk saya. Semua pengendali saya mewarisi dari pengendali basis. Di pengontrol dasar, saya memiliki metode berikut
4. Tambahkan CustomError.cshtml ke folder Shared views Anda. Di bawah ini milik saya;
Sekarang di pengontrol aplikasi Anda, Anda dapat melakukan sesuatu seperti ini;
Sekarang untuk peringatan . Itu tidak akan menangani kesalahan file statis. Jadi jika Anda memiliki rute seperti example.com/widgets dan pengguna mengubahnya menjadi example.com/widgets.html , mereka akan mendapatkan halaman kesalahan default IIS sehingga Anda harus menangani kesalahan level IIS dengan cara lain.
sumber
Posting jawaban karena komentar saya terlalu panjang ...
Ini adalah komentar dan pertanyaan untuk postingan / jawaban unicorn:
https://stackoverflow.com/a/7499406/687549
Saya lebih suka jawaban ini daripada yang lain karena kesederhanaannya dan fakta bahwa beberapa orang di Microsoft dikonsultasikan. Saya punya tiga pertanyaan dan jika mereka bisa dijawab maka saya akan menyebut jawaban ini sebagai grail suci dari semua 404/500 jawaban kesalahan pada jalinan untuk aplikasi ASP.NET MVC (x).
@ Pure.Krome
Bisakah Anda memperbarui jawaban Anda dengan hal-hal SEO dari komentar yang ditunjukkan oleh GWB (tidak pernah ada yang menyebutkan hal ini dalam jawaban Anda) -
<customErrors mode="On" redirectMode="ResponseRewrite">
dan<httpErrors errorMode="Custom" existingResponse="Replace">
?Bisakah Anda bertanya kepada teman-teman tim ASP.NET Anda apakah boleh melakukannya seperti itu - akan menyenangkan jika ada konfirmasi - mungkin itu adalah tidak-tidak besar untuk berubah
redirectMode
danexistingResponse
dengan cara ini untuk dapat bermain dengan baik dengan SEO ?!Anda dapat menambahkan beberapa klarifikasi seputar semua hal (
customErrors redirectMode="ResponseRewrite"
,customErrors redirectMode="ResponseRedirect"
,httpErrors errorMode="Custom" existingResponse="Replace"
, HAPUScustomErrors
Sama Sekali sebagai seseorang disarankan) setelah berbicara dengan teman-teman Anda di Microsoft?Seperti yang saya katakan; itu akan menjadi supernice jika kami dapat membuat jawaban Anda lebih lengkap karena ini tampaknya menjadi pertanyaan yang cukup populer dengan 54.000 tampilan.
Pembaruan : Unicorn answer melakukan 302 Found dan 200 OK dan tidak dapat diubah untuk hanya mengembalikan 404 menggunakan rute. Itu harus berupa file fisik yang tidak terlalu MVC: ish. Jadi beralih ke solusi lain. Sayang sekali karena ini sepertinya menjadi MVC pamungkas: ish jawab sejauh ini.
sumber
Menambahkan solusi saya, yang hampir identik dengan Herman Kan, dengan kerutan kecil agar dapat bekerja untuk proyek saya.
Buat pengontrol kesalahan khusus:
Kemudian buat pabrik pengontrol khusus:
Akhirnya, tambahkan override ke pengontrol kesalahan khusus:
Dan itu saja. Tidak perlu untuk perubahan Web.config.
sumber
1) Buat kelas Pengontrol abstrak.
2) Buat warisan dari kelas abstrak ini di semua pengontrol Anda
3) Dan tambahkan tampilan bernama "NotFound" di folder View-Shared Anda.
sumber
Saya telah melalui sebagian besar solusi yang diposting di utas ini. Walaupun pertanyaan ini mungkin sudah lama, masih sangat berlaku untuk proyek-proyek baru bahkan sekarang, jadi saya menghabiskan banyak waktu membaca jawaban yang disajikan di sini dan juga di mana.
Ketika @Marco menunjukkan berbagai kasus di mana 404 dapat terjadi, saya memeriksa solusi yang saya susun bersama terhadap daftar itu. Selain daftar persyaratannya, saya juga menambahkan satu lagi.
Solusi ini 2 kali lipat:
Bagian pertama berasal dari @Guillaume di https://stackoverflow.com/a/27354140/2310818 . Solusi mereka menangani 404 apa pun yang disebabkan karena rute tidak valid, pengontrol tidak valid, dan tindakan tidak sah.
Idenya adalah untuk membuat WebForm dan kemudian membuatnya memanggil tindakan NotFound dari Pengontrol Kesalahan MVC Anda. Itu melakukan semua ini tanpa redirect sehingga Anda tidak akan melihat 302 tunggal di Fiddler. URL asli juga dipertahankan, yang membuat solusi ini fantastis!
Bagian kedua darinya berasal dari @ Germán di https://stackoverflow.com/a/5536676/2310818 . Solusi mereka menangani setiap 404 yang dikembalikan oleh tindakan Anda dalam bentuk HttpNotFoundResult () atau melempar HttpException baru ()!
Idenya adalah memiliki tampilan filter pada respons serta pengecualian yang dilemparkan oleh pengontrol MVC Anda dan untuk memanggil tindakan yang sesuai di Pengontrol Kesalahan Anda. Sekali lagi solusi ini berfungsi tanpa redirect dan url asli tetap dipertahankan!
Seperti yang Anda lihat, kedua solusi ini bersama-sama menawarkan mekanisme penanganan kesalahan yang sangat kuat dan mereka mencapai semua persyaratan yang tercantum oleh @Marco serta persyaratan saya. Jika Anda ingin melihat sampel yang berfungsi atau demo dari solusi ini, silakan tinggalkan di komentar dan saya akan senang untuk menyatukannya.
sumber
Saya telah membaca semua artikel tetapi tidak ada yang berhasil untuk saya: Pengguna saya harus mengetikkan apa saja di halaman 404 kustom url Anda. Saya pikir ini sangat mudah. Tapi Anda harus memahami penanganan 404 dengan benar:
Saya menemukan artikel ini sangat membantu. Harus dibaca sekaligus. Halaman kesalahan Custome-Ben Foster
sumber