ASP0005:不要将属性置于由路由处理程序 Lambda 调用的方法上

规则 ID ASP0005
类别 使用情况
修复是中断修复还是非中断修复 非中断

原因

已将属性应用于方法定义而不是路由处理程序终结点中的路由处理程序。

规则说明

声明终结点后,需将属性应用于委托参数才能生效。 例如,未在已注册的终结点上设置以下代码示例中的 Authorize 属性:

app.MapGet("/todos/{id}", GetTodoById);

[Authorize]
Todo GetTodoById(int id)
{
  ...
}

必须将该属性置于路由处理程序参数上,如以下代码所示:

app.MapGet("/todos/{id}", [Authorize] GetTodoById);

Todo GetTodoById(int id)
{
  ...
}

如何解决冲突

要修复违反此规则的问题,请确保将终结点属性应用于路由处理程序参数:

app.MapGet("/todos/{id}", [Authorize] (int id) => {});
app.MapGet("/users/{id}", [Authorize] GetUserById);

何时禁止显示警告

不禁止显示此规则发出的警告。 错误放置的属性可能会导致运行时出现意外行为。