ASP0007:路由参数和参数可选性不匹配

价值
规则 ID ASP0007
类别 用法
修复是中断修复还是非中断修复 非中断

原因

路由参数在委托定义中声明为必需参数,但在终结点路由中标记为可选。

规则说明

声明终结点时,可以在路由模板和路由处理程序参数中声明参数的可选性。 当参数在处理程序中声明为可选参数时,还必须在路由模板中声明为可选参数。 例如,GET /todos 无法解析以下代码的匹配项:

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

前面的代码无法匹配 GET /todos ,因为 id 未提供参数,即使它在路由处理程序中被视为可选。

如何修复违规行为

要修复违反此规则的问题,请确保路由模板中的可选性与委托匹配。 例如,对于以下代码示例:

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

如果参数是必需参数,请通过从int?中删除?来使类型不可为 null。

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

如果参数是可选的,则应应用 可为 null 的值类型 运算符 ?

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

何时禁止显示警告

不禁止显示此规则发出的警告。 不匹配的参数可选性可能会导致运行时路由出现意外行为。