MVC Framework - Bộ lọc hành động

Trong ASP.NET MVC, bộ điều khiển xác định phương thức hành động và các phương thức hành động này thường có mối quan hệ 1-1 với các điều khiển giao diện người dùng, chẳng hạn như nhấp vào nút hoặc liên kết, v.v. Ví dụ, trong một trong các ví dụ trước đây của chúng tôi, UserController lớp chứa các phương thức UserAdd, UserDelete, v.v.

Tuy nhiên, nhiều khi chúng tôi muốn thực hiện một số hành động trước hoặc sau một hoạt động cụ thể. Để đạt được chức năng này, ASP.NET MVC cung cấp một tính năng để thêm các hành vi trước và sau hành động trên các phương thức hành động của bộ điều khiển.

Các loại bộ lọc

Khung ASP.NET MVC hỗ trợ các bộ lọc hành động sau:

  • Action Filters- Bộ lọc hành động được sử dụng để triển khai logic được thực thi trước và sau khi thực thi hành động của bộ điều khiển. Chúng ta sẽ xem xét các Bộ lọc Hành động một cách chi tiết trong chương này.

  • Authorization Filters - Bộ lọc ủy quyền được sử dụng để thực hiện xác thực và ủy quyền cho các hành động của bộ điều khiển.

  • Result Filters- Bộ lọc kết quả chứa logic được thực thi trước và sau khi một kết quả xem được thực thi. Ví dụ: bạn có thể muốn sửa đổi kết quả xem ngay trước khi chế độ xem được hiển thị cho trình duyệt.

  • Exception Filters- Bộ lọc ngoại lệ là loại bộ lọc cuối cùng chạy. Bạn có thể sử dụng bộ lọc ngoại lệ để xử lý các lỗi do hành động của bộ điều khiển hoặc kết quả hành động của bộ điều khiển đưa ra. Bạn cũng có thể sử dụng bộ lọc ngoại lệ để ghi lỗi.

Bộ lọc hành động là một trong những bộ lọc thường được sử dụng nhất để thực hiện xử lý dữ liệu bổ sung hoặc thao tác các giá trị trả về hoặc hủy thực hiện hành động hoặc sửa đổi cấu trúc chế độ xem tại thời điểm chạy.

Bộ lọc hành động

Bộ lọc Hành động là các thuộc tính bổ sung có thể được áp dụng cho một phần bộ điều khiển hoặc toàn bộ bộ điều khiển để sửa đổi cách thức thực thi một hành động. Các thuộc tính này là các lớp .NET đặc biệt bắt nguồn từ System.Attribute có thể được gắn vào các lớp, phương thức, thuộc tính và trường.

ASP.NET MVC cung cấp các bộ lọc hành động sau:

  • Output Cache - Bộ lọc hành động này lưu vào bộ nhớ cache đầu ra của một hành động bộ điều khiển trong một khoảng thời gian nhất định.

  • Handle Error - Bộ lọc hành động này xử lý các lỗi phát sinh khi một hành động của bộ điều khiển thực thi.

  • Authorize - Bộ lọc hành động này cho phép bạn hạn chế quyền truy cập vào một người dùng hoặc vai trò cụ thể.

Bây giờ, chúng ta sẽ xem ví dụ mã để áp dụng các bộ lọc này trên bộ điều khiển mẫu ActionFilterDemoController. (ActionFilterDemoController chỉ được sử dụng làm ví dụ. Bạn có thể sử dụng các bộ lọc này trên bất kỳ bộ điều khiển nào của mình.)

Bộ nhớ đệm đầu ra

Example - Chỉ định giá trị trả về được lưu vào bộ nhớ đệm trong 10 giây.

public class ActionFilterDemoController : Controller { 
   [HttpGet] 
   OutputCache(Duration = 10)] 
   
   public string Index() { 
      return DateTime.Now.ToString("T");  
   } 
}

Xử lý lỗi

Example - Chuyển hướng ứng dụng đến trang lỗi tùy chỉnh khi lỗi được kích hoạt bởi bộ điều khiển.

[HandleError] 
public class ActionFilterDemoController : Controller { 
   
   public ActionResult Index() { 
      throw new NullReferenceException(); 
   }  
   
   public ActionResult About() { 
      return View(); 
   } 
}

Với đoạn mã trên, nếu có bất kỳ lỗi nào xảy ra trong quá trình thực hiện hành động, nó sẽ tìm một dạng xem có tên Lỗi trong thư mục Dạng xem và hiển thị trang đó cho người dùng.

Ủy quyền

Example - Chỉ cho phép người dùng được ủy quyền đăng nhập ứng dụng.

public class ActionFilterDemoController: Controller { 
   [Authorize] 
   
   public ActionResult Index() { 
      ViewBag.Message = "This can be viewed only by authenticated users only"; 
      return View(); 
   }  
   
   [Authorize(Roles="admin")] 
   public ActionResult AdminIndex() { 
      ViewBag.Message = "This can be viewed only by users in Admin role only"; 
      return View(); 
   } 
}

Với đoạn mã trên, nếu bạn cố gắng truy cập ứng dụng mà không đăng nhập, nó sẽ xuất hiện một lỗi tương tự như lỗi hiển thị trong ảnh chụp màn hình sau.