ASP0007: La opcionalidad de argumentos y parámetros de ruta no coincide
Valor | |
---|---|
Identificador de la regla | ASP0007 |
Categoría | Uso |
La corrección es problemática o no problemática | Poco problemático |
Causa
Un parámetro de ruta se declara como necesario en la definición Delegado, pero se marca como opcional en la ruta del punto de conexión.
Descripción de la regla
Cuando se declara un punto de conexión, la opcionalidad de los parámetros se puede declarar tanto en la plantilla de ruta como en los argumentos del controlador de rutas. Cuando un parámetro se declara como opcional en el controlador, también debe declararse como opcional en la plantilla de ruta. Por ejemplo, GET /todos
no puede resolver una coincidencia para el código siguiente:
app.MapGet("/todos/{id}", (int? id) => {});
El código anterior no coincide con GET /todos
porque el parámetro id
no se proporcionó, aunque se trate como opcional en el controlador de rutas.
Cómo corregir infracciones
Para corregir una infracción de esta regla, asegúrese de que la opcionalidad de la plantilla de ruta y el delegado coinciden. Por ejemplo, para el código de ejemplo siguiente:
app.MapGet("/todos/{id}", (int? id) => {});
Si el parámetro está pensado para ser necesario, quite el tipo que no acepta valores ?
de int?
:
app.MapGet("/todos/{id}", (int id) => {});
Si el parámetro está pensado para ser opcional, se debe aplicar el operador ?
de tipo de valor que acepta valores NULL:
app.MapGet("/todos/{id?}", (int? id) => {});
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla. La opcionalidad del parámetro no coincidente puede dar lugar a un comportamiento inesperado con el enrutamiento en tiempo de ejecución.