Nguon: Microsoft Learn · .NET 8.0

ASP0005: Không đặt attribute trên method được gọi bởi route handler lambda

Nguồn: ASP0005: Do not place attribute on method called by route handler lambda

-Giá trị
Rule ID (Mã quy tắc)ASP0005
Category (Danh mục)Usage (Sử dụng)
Fix is breaking or non-breaking (Sửa lỗi có phá vỡ tương thích không)Non-breaking (Không phá vỡ)

Nguyên nhân

Một attribute (thuộc tính) được áp dụng lên định nghĩa method thay vì lên route handler trong một route handler endpoint (điểm cuối của trình xử lý định tuyến).

Mô tả quy tắc

Khi khai báo một endpoint, các attribute phải được áp dụng lên tham số delegate (hàm ủy quyền) để có hiệu lực. Ví dụ, attribute [Authorize] trong đoạn code sau không được đặt trên endpoint đã đăng ký:

csharp
app.MapGet("/todos/{id}", GetTodoById);

[Authorize]
Todo GetTodoById(int id)
{
  ...
}

Attribute phải được đặt trên tham số route handler như trong đoạn code sau:

csharp
app.MapGet("/todos/{id}", [Authorize] GetTodoById);

Todo GetTodoById(int id)
{
  ...
}

Cách khắc phục vi phạm

Để khắc phục vi phạm quy tắc này, hãy đảm bảo các attribute của endpoint được áp dụng lên tham số route handler:

csharp
app.MapGet("/todos/{id}", [Authorize] (int id) => {});
app.MapGet("/users/{id}", [Authorize] GetUserById);

Khi nào có thể bỏ qua cảnh báo

Không nên bỏ qua cảnh báo từ quy tắc này. Attribute đặt sai vị trí có thể dẫn đến hành vi không mong muốn lúc runtime (thời gian chạy).