Поделиться через


ASP0007: параметр маршрута и необязательность аргументов не совпадают

Ценность
Идентификатор правила ASP0007
Категория Использование
Исправление является разрушающим или неразрушающим. Неразрывный

Причина

Параметр маршрута объявляется как обязательный в определении делегата, но помечается как необязательный в маршруте конечной точки.

Описание правила

Если конечная точка объявлена, необязательность параметров может быть объявлена как в шаблоне маршрута, так и в аргументах обработчика маршрутов. Если параметр объявлен как необязательный в обработчике, он также должен быть объявлен как необязательный в шаблоне маршрута. Например, GET /todos не может соответствовать следующему коду:

app.MapGet("/todos/{id}", (int? id) => {});

Приведенный выше код не соответствует GET /todos , так как id параметр не был предоставлен, даже если он рассматривается как необязательный в обработчике маршрутов.

Устранение нарушений

Чтобы устранить нарушение этого правила, убедитесь, что необязательность в шаблоне маршрута и делегат соответствовали друг другу. Например, для следующего примера кода:

app.MapGet("/todos/{id}", (int? id) => {});

Если параметр должен быть обязательным, сделайте тип, не допускающий значение NULL, удалив ? его из int?:

app.MapGet("/todos/{id}", (int id) => {});

Если параметр должен быть необязательным, необходимо применить оператор ?:

app.MapGet("/todos/{id?}", (int? id) => {});

Когда следует подавлять предупреждения

Не подавляйте предупреждение из этого правила. Несоответствие необязательности параметров может привести к неожиданному поведению при маршрутизации во время выполнения.