Compartir a través de


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.