Tôi bối rối về cách xử lý tình huống này.Chiến lược tốt nhất để xử lý các ngoại lệ chưa được giải quyết (lỗi 500 phản hồi) trong hành động Asp.Net MVC cho các yêu cầu Ajax là gì?
Thông thường khi một ngoại lệ ASP.Net chưa được xử lý xảy ra, máy chủ gửi lại thông báo HTML của một số loại, trình xử lý lỗi Asp.Net mặc định hoặc trình xử lý lỗi tùy chỉnh. Tuy nhiên, trong cả hai trường hợp, HTML đang được gửi lại (và thường là một ý tưởng hay để làm cho trang thân thiện với người dùng).
Tuy nhiên, tôi gặp sự cố trong đó các ngoại lệ chưa được xử lý xảy ra trong hành động của trình điều khiển Asp.net MVC được dự kiến sẽ trả về JSON cho các cuộc gọi Ajax. Khi javascript đọc trang được trả về (là HTML thay vì JSON dự định) nó bị treo do không thể chuyển đổi phản hồi thành JSON (ngay bây giờ tôi đang sử dụng ExtJS). Tôi muốn Json được trả lại khi có ngoại lệ để người dùng có thể được thông báo rằng đã xảy ra lỗi.
Giải pháp duy nhất tôi có thể nghĩ đến là phải làm như sau trong mọi hành động trả về Json:
try { .... }
catch (Exception ex)
{
return Json(new { success = false, msg = ex.Message });
}
tôi không giống như phương pháp mà bởi vì nó đòi hỏi tôi bắt tất cả các trường hợp ngoại lệ (mà có hại cho rõ ràng lý do) và nó đòi hỏi tôi phải tiêu mỗi hành động JsonResult
với cùng một mã xử lý ngoại lệ (mà làm cho nó khó thay đổi sau này).
Có phương pháp nào tốt hơn để trả về kết quả lỗi thích hợp hơn chỉ trên các phương thức hành động trả về Json, nhưng vẫn giữ các trang lỗi thường xuyên thân thiện với người dùng đối với các yêu cầu web không Ajax?
Bạn có thể muốn kế thừa từ HandleErrorAttribute thay thế và ghi đè OnException. Bằng cách đó, bộ lọc của bạn sẽ chỉ kích hoạt khi có ngoại lệ, thay vì cho mọi yêu cầu. –
Bộ lọc hành động dường như là cách để đi. Đánh dấu đây là câu trả lời do mã! – KallDrexx
@ The Flower Guy: Ồ, huh, nghe có vẻ đúng. Tôi sẽ bắn một khi tôi có cơ hội. Cảm ơn! – adamjford