Share via


ASP0007: o parâmetro de rota e a opcionalidade do argumento são incompatíveis

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

Causa

Um parâmetro de rota é declarado conforme necessário na definição de Delegado, mas é marcado como opcional na rota do ponto de extremidade.

Descrição da regra

Quando um ponto de extremidade é declarado, a opcionalidade dos parâmetros pode ser declarada no modelo de rota e nos argumentos do manipulador de rotas. Quando um parâmetro é declarado como opcional no manipulador, ele também deve ser declarado como opcional no modelo de rota. Por exemplo, GET /todos falha ao resolver uma correspondência para o seguinte código:

app.MapGet("/todos/{id}", (int? id) => {});

O código anterior não corresponde a GET /todos porque o parâmetro id não foi fornecido, embora seja tratado como opcional no manipulador de rotas.

Como corrigir violações

Para corrigir uma violação dessa regra, verifique se a opcionalidade no modelo de rota e no delegado correspondem. Por exemplo, para o seguinte exemplo de código:

app.MapGet("/todos/{id}", (int? id) => {});

Se o parâmetro for necessário, torne o tipo não anulável removendo o ? de int?:

app.MapGet("/todos/{id}", (int id) => {});

Se o parâmetro for destinado a ser opcional, o operador de tipo de valor anulável? deverá ser aplicado:

app.MapGet("/todos/{id?}", (int? id) => {});

Quando suprimir avisos

Não suprima um aviso nessa regra. A opção de parâmetro incompatível pode resultar em um comportamento inesperado com o roteamento em runtime.