ASP0007: 경로 매개 변수 및 인수 선택성이 일치하지 않음
값 | |
---|---|
규칙 ID | ASP0007 |
범주 | 사용 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
원인
경로 매개 변수는 대리자 정의에서 필요에 따라 선언되지만 엔드포인트 경로에서 선택 사항으로 표시됩니다.
규칙 설명
엔드포인트가 선언되면 경로 템플릿과 경로 처리기 인수 모두에서 매개 변수의 선택성을 선언할 수 있습니다. 매개 변수가 처리기에서 선택 사항으로 선언되면 경로 템플릿에서도 선택 사항으로 선언되어야 합니다. 예를 들어 GET /todos
은 다음 코드에 대한 일치 항목을 해결하지 못합니다.
app.MapGet("/todos/{id}", (int? id) => {});
이전 코드는 경로 처리기에서 선택 사항으로 처리되더라도 id
매개 변수가 제공되지 않았기 때문에 GET /todos
과 일치하지 않습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 경로 템플릿 및 대리자의 선택 사항이 일치하는지 확인합니다. 예를 들면 다음과 같은 코드 샘플입니다.
app.MapGet("/todos/{id}", (int? id) => {});
매개 변수가 필요한 경우 int?
에서 ?
을 제거하여 형식을 null 비허용으로 합니다.
app.MapGet("/todos/{id}", (int id) => {});
매개 변수가 선택 사항인 경우 null 허용값 형식 연산자 ?
를 적용해야 합니다.
app.MapGet("/todos/{id?}", (int? id) => {});
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시하지 않아야 합니다. 매개 변수 선택 사항이 일치하지 않는 경우 런타임에 라우팅 시 예기치 않은 동작이 발생할 수 있습니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
ASP.NET Core