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

如果该参数为可选参数,则应该应用可为空值类型 运算符 ?

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

何时禁止显示警告

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