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


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

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

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

Когда лучше отключить предупреждения

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