ASP0005: não colocar atributo no método chamado pelo manipulador de rotas lambda

Valor
ID da regra ASP0005
Categoria Uso
Correção interruptiva ou sem interrupção Sem interrupção

Causa

Um atributo foi aplicado a uma definição de método em vez do manipulador de rotas em um ponto de extremidade do manipulador de rotas.

Descrição da regra

Quando um ponto de extremidade é declarado, os atributos devem ser aplicados ao parâmetro delegado para serem eficazes. Por exemplo, o atributo Authorize no seguinte exemplo de código não está definido no ponto de extremidade registrado:

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

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

O atributo deve ser colocado no parâmetro do manipulador de rotas, conforme mostrado no seguinte código:

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

Todo GetTodoById(int id)
{
  ...
}

Como corrigir violações

Para corrigir uma violação dessa regra, verifique se os atributos de ponto de extremidade são aplicados ao parâmetro do manipulador de rotas:

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

Quando suprimir avisos

Não suprima um aviso nessa regra. Atributos incorretos podem resultar em um comportamento inesperado em runtime.