ASP0007: Route parameter (tham số route) và argument (đối số) không khớp về tính tùy chọn
| - | Giá trị |
|---|---|
| Rule ID (Mã quy tắc) | ASP0007 |
| Category (Danh mục) | Usage (Sử dụng) |
| Fix is breaking or non-breaking (Sửa có gây breaking change không) | Non-breaking (Không gây breaking change) |
Nguyên nhân
Một route parameter được khai báo là bắt buộc trong định nghĩa Delegate nhưng lại được đánh dấu là tùy chọn trong route của endpoint.
Mô tả quy tắc
Khi một endpoint được khai báo, tính tùy chọn của các parameter có thể được khai báo ở cả route template (mẫu route) lẫn trong các đối số của route handler (trình xử lý route). Khi một parameter được khai báo là tùy chọn trong handler, nó cũng phải được khai báo là tùy chọn trong route template. Ví dụ, GET /todos sẽ không khớp với đoạn code sau:
app.MapGet("/todos/{id}", (int? id) => {});Đoạn code trên không khớp GET /todos vì tham số id không được cung cấp, mặc dù nó được xử lý như là tùy chọn trong route handler.
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 rằng tính tùy chọn trong route template và trong delegate khớp nhau. Ví dụ, với đoạn code sau:
app.MapGet("/todos/{id}", (int? id) => {});Nếu parameter được dự định là bắt buộc, hãy làm cho kiểu không nullable bằng cách xóa ? khỏi int?:
app.MapGet("/todos/{id}", (int id) => {});Nếu parameter được dự định là tùy chọn, thì toán tử nullable value type (kiểu giá trị nullable) ? nên được áp dụng:
app.MapGet("/todos/{id?}", (int? id) => {});Khi nào nên bỏ qua cảnh báo
Không nên bỏ qua cảnh báo từ quy tắc này. Sự không khớp về tính tùy chọn của parameter có thể dẫn đến hành vi không mong muốn với routing (định tuyến) khi chạy ứng dụng.