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) => {});

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시하지 않아야 합니다. 매개 변수 선택 사항이 일치하지 않는 경우 런타임에 라우팅 시 예기치 않은 동작이 발생할 수 있습니다.