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) => {});
何时禁止显示警告
不禁止显示此规则发出的警告。 不匹配的参数可选性可能会导致运行时路由出现意外行为。