Filters (bộ lọc) được dùng để chèn logic thêm tại các mức độ khác nhau của pipeline xử lý request trong WebAPI Framework. Filters cung cấp cách xử lý các cross-cutting concerns (logging, authorization, caching). Filters có thể áp dụng cho action method hoặc controller theo cách khai báo (declarative) hoặc lập trình (programmatic). Dưới đây là các loại filter trong Web API C#.
Authentication Filter (Bộ lọc xác thực)
Giúp xác thực chi tiết người dùng. Trong authentication filter, ta viết logic kiểm tra tính xác thực của user.
Authorization Filter (Bộ lọc ủy quyền)
Chịu trách nhiệm kiểm tra quyền truy cập của User. Chúng triển khai interface IAuthorizationFilter trong framework.
Action Filter (Bộ lọc hành động)
Dùng để thêm logic trước hoặc sau khi thực thi action methods. Các phương thức OnActionExecuting và OnActionExecuted dùng để thêm logic trước và sau khi action method thực thi.
Exception Filter (Bộ lọc ngoại lệ)
Được thực thi khi phương thức controller ném ra ngoại lệ chưa xử lý không phải HttpResponseException. HttpResponseException là trường hợp đặc biệt, được thiết kế để trả về HTTP response.
Override Filter (Bộ lọc ghi đè)
Dùng để tùy chỉnh hành vi của filter khác cho từng action method. Đôi khi có yêu cầu: bất kể filter nào được áp dụng, ta cần ghi đè. Ví dụ: áp dụng filter ở cấp controller nhưng có action trong controller không muốn dùng filter đó, ta dùng phiên bản override của filter.
Filters thường được áp dụng theo 3 cách:
- Cấp Controller
- Cấp Action Method
- Cấp Global (WebApi.Config.cs)
Xem ví dụ triển khai authorization filter và cách hoạt động.
Ví dụ
using System.Web.Http;
namespace DemoWebApplication.Controllers
{
public class DemoController : ApiController
{
[Authorize]
public IHttpActionResult Get()
{
return Ok();
}
}
}
Vì đã thêm attribute authorize lên action method, cần ủy quyền phù hợp như bearer token, API key, OAuth để truy cập action method. Truy cập trái phép sẽ trả về phản hồi 401 Unauthorized.
