ASP0005: No colocar el atributo en el método llamado por lambda del controlador de ruta
Valor | |
---|---|
Identificador de la regla | ASP0005 |
Categoría | Uso |
La corrección es problemática o no problemática | Poco problemático |
Causa
Se aplicó un atributo a una definición de método en lugar del controlador de ruta en un punto de conexión del controlador de ruta.
Descripción de la regla
Cuando se declara un punto de conexión, los atributos se deben aplicar al parámetro delegado para que sea efectivo. Por ejemplo, el atributo Authorize del ejemplo de código siguiente no está establecido en el punto de conexión registrado:
app.MapGet("/todos/{id}", GetTodoById);
[Authorize]
Todo GetTodoById(int id)
{
...
}
El atributo debe colocarse en el parámetro del controlador de ruta, como se muestra en el código siguiente:
app.MapGet("/todos/{id}", [Authorize] GetTodoById);
Todo GetTodoById(int id)
{
...
}
Cómo corregir infracciones
Para corregir una infracción de esta regla, asegúrese de que los atributos de punto de conexión se aplican al parámetro del controlador de ruta:
app.MapGet("/todos/{id}", [Authorize] (int id) => {});
app.MapGet("/users/{id}", [Authorize] GetUserById);
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla. Los atributos mal colocados pueden dar lugar a un comportamiento inesperado en runtime.