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) => {});
Когда лучше отключить предупреждения
Не подавляйте предупреждение из этого правила. Необязательный параметр может привести к неожиданному поведению при маршрутизации во время выполнения.
ASP.NET Core