Tôi không chắc chắn sự khác biệt giữa các cách khác nhau để xử lý lỗi.Tôi cần thêm thông tin về HandleError
Trong MVC asp.net (dự án mặc định) họ đặt này trên đầu trang của lớp
[HandleError]
Vì vậy, tôi đã được đọc một số blog và người đó nói này
". ... nói với khung làm việc rằng nếu một ngoại lệ chưa được giải quyết xảy ra trong bộ điều khiển của bạn thay vì hiển thị màn hình màu vàng mặc định của Death thì thay vào đó nó sẽ phục vụ một khung nhìn có tên là Error. "
http://blog.dantup.me.uk/2009/04/aspnet-mvc-handleerror-attribute-custom.html
Vì vậy, điều đó có nghĩa là tôi không nên đánh bắt bất kỳ lỗi nào (tức là không có sản lượng đánh bắt thử)?
Sau đó tôi đang tìm kiếm trong một cuốn sách và họ có
[HandleError(ExceptionType=typeof(InsufficientMemoryException),View="About")]
public ActionResult HandleError()
{
throw new
InsufficientMemoryException();
return View("Home");
}
Vì vậy, họ chỉ cần đặt nó trên đầu trang của ActionResult này và cung cấp cho nó một loại ngoại lệ. Câu hỏi đầu tiên của tôi là điều gì sẽ xảy ra nếu bạn có thêm một lỗi mà bạn đang ném? Ngoài ra tôi nghĩ bạn nên xử lý tất cả các lỗi. Tôi biết đây chỉ là một ví dụ nhỏ nhưng bạn không nên bắt MemoryException ở đâu đó hoặc làm điều này vít lên "HandleError" nếu bạn làm gì?
Tôi cũng nhận thấy trong khi nhìn vào nó trong VS rằng HandleError có 2 phương thức quá tải. Một trong số đó là ở trên và một là HandError().
Vậy tại sao trong tệp mẫu asp.net MVC chỉ [HandleError] chứ không phải [HandleError()]? Là một trong những được sử dụng cho các phương pháp hành động và một được sử dụng cho những lớp học? Tôi giả định HandleError ở đầu lớp một sẽ giống như HandleError (typeof (ngoại lệ))?
và cuối cùng có một cái gì đó được gọi là IExceptionFilter. Vì vậy, bạn đang sử dụng này nếu bạn muốn đăng nhập tất cả các trường hợp ngoại lệ hoặc nếu bạn có một số ngoại lệ đặc biệt mà bạn muốn làm một cái gì đó khác với?
Cũng giống như nếu tôi chỉ muốn ghi lại tất cả ngoại lệ, tôi sẽ làm cái gì khác đặc biệt với NullReferenceexception?
Tôi đã xem hướng dẫn này http://dimecasts.net/Casts/CastDetails/37 và tôi không thấy điều này "ActionFilterAttribute" mà họ đang nói đến. Đây có phải là từ một phiên bản cũ hay gì đó không?
Giống như dường như nó có 4 phương pháp mà bạn có thể sử dụng và bạn phải ghi đè lên chúng. Trong cuốn sách của tôi nó chỉ nói về những:
- IAuthorizationFilter
- IActionFilter
- IResultFilter
- IExceptionFilter
và họ là tất cả các giao diện vì vậy không trọng. Không phải của họ mặc dù có 4 phương pháp. Chỉ một hoặc 2.
Cảm ơn
Một điều nữa. Bạn có nên kiểm tra mọi ngoại lệ không?Giống như một trong những phương pháp của tôi có thể gặp phải 7 ngoại lệ khác nhau. Tôi có nên kiểm tra cho tất cả 7 ngoại lệ (tức là vứt chúng) sau đó cuối cùng bắt chúng và xử lý chúng (tôi thường chỉ in một số thông báo ra).
Nếu có thì VS2008 có thứ gì đó tìm thấy các ngoại lệ có thể xảy ra. Tôi thấy thật khó để nói đôi khi điều gì có thể là ném một ngoại lệ sau đó tôi phải săn lùng cái nào.
Hmm để xử lý lỗi là nếu bạn muốn một trang chung cho tất cả các lỗi? Nếu bạn muốn có nhiều lỗi cụ thể hơn thì bạn đặt nó trên actionView? Làm thế nào về "IExceptionFilter" khi nào tôi sẽ sử dụng cái này? Đây có phải là nơi tôi sẽ là công cụ đăng nhập của tôi (hoặc mã Elmah) không? Ngoài ra tôi vẫn không chắc chắn mã trông như thế nào? Tôi không xử lý các lỗi (try/catch) hay tôi vẫn xử lý chúng. Tôi không rõ ràng nếu tôi sẽ xử lý chúng nếu điều đó gây nhầm lẫn [HandleError]. Ngoài ra, nếu tôi xử lý chúng, điều đó sẽ không ngăn chặn khung làm việc của ELMAH đối với các ngoại lệ được xử lý? Tức là tôi sẽ cần phải đăng nhập những cái đã biết bằng tay? – chobo2