Trang chủ Lập trình C# Xử lý lỗi tập trung trong .NET
Lập trình C# 12/05/2021 8,278 lượt xem

Xử lý lỗi tập trung trong .NET

Xử lý lỗi tập trung trong .NET

Nếu ứng dụng của bạn dùng quá nhiều khối lệnh try-catch thì có thể bạn đang bị duplicate xử lý lỗi ở nhiều nơi khác nhau. Có nhiều cách để xử lý lỗi tập trung tại 1 nơi. Bài viết này sẽ giúp ích cho bạn.

Vài năm trước các phương phức code của chúng ta bắt lỗi dạng như thế này:

 

Rất đơn giản, khi ta muốn cập nhật chi tiết của Employee, có nhiều điều kiện khác nhau mà có thể xảy ra lỗi. Chúng ta có thể bắt nó ngay trong chính method này. Nhưng có vẻ nếu chỗ nào cũng code thế này thì code bị duplicate nhiều quá.

Sử dụng Exception filter để bắt exception tập trung

.NET đưa ra một cách xử lý bắt lỗi toàn bộ ứng dụng ở 1 chỗ trong Request Pipeline. Việc cần làm là add một class kế thừa từ IExceptionFilter:

 

Sau khi xong, bạn sẽ lắp nó vào một nơi trong Request Pipeline. (Thứ tự trong ConfigureServices sẽ là thứ tự thực hiện các middleware trong Request Pipeline). Bạn sẽ đặt như sau:

 

Vậy là xong việc xử lý. Giờ hãy thực hiện thân hàm OnException nhé. Đơn giản chúng ta chỉ cần chuyển các nội dung bắt lỗi trùng nhau vào 1 chỗ trong OnException thôi:

 

Nghĩa là hông cần phải bắt lỗi ở trong Controller, Service hoặc các chỗ khác nữa. Mà trong đó chúng ta chỉ cần check điều kiện và throw ra Exception nếu muốn. Sau đó chúng sẽ được thu gom lại ở 1 chỗ duy nhất là Filter.

 

Throw một custom exception

Ném exception là việc bình thường trong code. Có 2 loại là ném ra chủ động tường minh chúng ta có thể biết được trong code, ngoài ra có các unhandled exception tức các exception mà chúng ta không chủ động xử lý được. Cái này nó cũng được xử lý mặc định vào Filter. Còn ở đây nói đến việc chủ động ném ra lỗi:

 

Và cũng có thể bổ sung việc bắt lỗi vừa ném ra trong OnException method:

 

Nên giờ code sẽ từ:

 

trở thành:

 

Đây chỉ là một ví dụ nhỏ, nhưng ý chính là việc tập trung hóa việc xử lý lỗi trong API của bạn giúp code đơn giản hơn, đỡ bị duplicate và thống nhất trong việc xử lý lỗi.

Xem qua các loại filter khác

Bên cạnh IExceptionFilter, .NET còn hỗ trợ nhiều loại filter khác với mục đích khác như:

  • IAuthenticationFilter
  • IAuthorizationFilter
  • IActionFilterThese
  • IResourceFilter
  • IResultFilter

Chúng được chỉ ra thứ tự trong Request Pipeline: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-5.0

Tóm lại

Các bước để bắt lỗi tập trung:

  1. Thêm class kế thừa IExceptionFilter
  2. Thêm code xử lý lỗi vào method OnException
  3. Gắn Filter vào method ConfigureServices trong Startup.cs
  4. Xóa các dòng Try-catch
  5. Throw exception ra ngoài nếu muốn

Trích nguồn từ: https://medium.com/vx-company/centralize-your-net-exception-handling-with-filters-a1e0fccf17b8

Chia sẻ:

Bài viết liên quan

Tìm hiểu về các loại Collection trong C#
11/12/2024 Bạch Ngọc Toàn

Tìm hiểu về các loại Collection trong C#

Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên

Đọc thêm
Sử dụng mảng (Arrays)
11/12/2024 Bạch Ngọc Toàn

Sử dụng mảng (Arrays)

Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.

Đọc thêm
Lập trình hướng đối tượng
11/12/2024 Bạch Ngọc Toàn

Lập trình hướng đối tượng

Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.

Đọc thêm
Vòng lặp (loop)
11/12/2024 Bạch Ngọc Toàn

Vòng lặp (loop)

Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.

Đọc thêm