ASP0005:不要在路由处理程序 lambda 调用的方法上放置属性

价值
规则 ID ASP0005
类别 Usage
修复是中断修复还是非中断修复 Non-breaking

原因

在路由处理程序终结点中,特性被应用于方法定义,而不是路由处理程序。

规则说明

声明终结点时,应将属性应用于委托参数,以便有效。 例如,以下代码示例中的 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);

何时禁止显示警告

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