Bagaimana cara saya tentang [HandleError]
filter di asp.net MVC Preview 5?
Saya mengatur customErrors di file Web.config saya
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
dan letakkan [HandleError] di atas Kelas Pengontrol saya seperti ini:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Kemudian saya membiarkan pengontrol saya mewarisi dari kelas ini dan memanggil CrashTest () pada mereka. Visual studio berhenti karena kesalahan dan setelah menekan f5 untuk melanjutkan, saya dialihkan ke Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (di mana sxi adalah nama pengontrol yang digunakan. Tentu saja jalur tidak dapat ditemukan dan saya mendapatkan "Server Error dalam Aplikasi '/'." 404.
Situs ini di-porting dari pratinjau 3 ke 5. Semuanya berjalan (tidak banyak bekerja untuk port) kecuali penanganan kesalahan. Ketika saya membuat proyek baru yang lengkap, penanganan kesalahan tampaknya berfungsi.
Ide ide?
--Catatan--
Karena pertanyaan ini memiliki lebih dari 3K tampilan sekarang, saya pikir akan bermanfaat untuk memasukkan apa yang saya gunakan saat ini (ASP.NET MVC 1.0). Dalam proyek kontribusi MVC ada atribut brilian yang disebut "RescueAttribute" Anda mungkin harus memeriksanya juga;)
sumber
RescueAttribute
sumber: mvccontrib.codeplex.com/SourceControl/changeset/view/…Jawaban:
Ketika Anda hanya menyediakan atribut HandleError ke kelas Anda (atau metode tindakan Anda dalam hal ini), maka ketika terjadi pengecualian yang tidak tertangani MVC akan mencari Tampilan terkait bernama "Kesalahan" terlebih dahulu di folder Tampilan Pengontrol. Jika tidak dapat menemukannya di sana maka itu akan melanjutkan untuk mencari di folder Shared View (yang seharusnya memiliki file Error.aspx di dalamnya secara default)
Anda juga dapat menumpuk atribut tambahan dengan informasi spesifik tentang jenis pengecualian yang Anda cari. Pada saat itu, Anda dapat mengarahkan Error ke tampilan tertentu selain tampilan default "Error".
Untuk informasi lebih lanjut, lihat entri blog Scott Guthrie tentang itu.
sumber
global.asax
seperti ini untuk menampilkan pesan kepada pengguna?Perlu juga diperhatikan bahwa kesalahan yang tidak menyetel kode kesalahan http menjadi 500
(mis. UnauthorizedAccessException)
tidak akan ditangani oleh filter HandleError.
sumber
Solusi untuk kode kesalahan http ke 500 ini adalah atribut yang disebut [ERROR] meletakkannya pada tindakan
//CONTOH:
sumber
Atribut dalam MVC sangat berguna dalam penanganan error pada metode get dan post , juga melacak panggilan ajax .
Buat pengontrol dasar dalam aplikasi Anda dan warisi di pengontrol utama (EmployeeController).
public class EmployeeController: BaseController
Tambahkan kode di bawah ini di pengontrol dasar.
================================================
Menemukan Direktori: Root / App_Start / FilterConfig.cs
Tambahkan kode di bawah ini:
Lacak Kesalahan AJAX:
Panggil fungsi CheckAJAXError dalam pemuatan halaman tata letak.
sumber
OnException
untuk menangani pengecualian" , tetapi menunjukkan implementasi yang sangat buruk.Anda kehilangan Error.aspx :) Dalam pratinjau 5, ini terletak di folder Views / Shared. Cukup salin dari proyek Pratinjau 5 baru.
sumber
}
sumber