Nguon: Microsoft Learn · .NET 8.0
ASP0005: Không đặt attribute trên method được gọi bởi 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).