MVC1004: renomear o parâmetro associado ao modelo

Valor
ID da regra MVC1004
Correção interruptiva ou sem interrupção Quebra

Causa

Um parâmetro associado ao modelo tem o mesmo nome de uma de suas propriedades.

Descrição da regra

A associação de modelo a um parâmetro complexo com uma propriedade com o mesmo nome pode resultar em um comportamento de associação inesperado. Considere renomear o parâmetro ou usar um atributo de associação para especificar um nome diferente.

Considere o seguinte código:

public class HomeController : Controller
{
    public IActionResult Get(SearchModel search)
    {
        ...
    }
}

public class SearcModel
{
    public string Search { get; set; }
}

Nesse modelo, o parâmetro e sua propriedade são chamados Search, o que resulta em uma associação de modelo tentando associar a propriedade como search.Search. Nomear um parâmetro e sua propriedade da mesma forma impede a associação a um valor sem um prefixo, como uma consulta semelhante a ?search=MySearchTerm.

Como corrigir violações

  • Renomeie o parâmetro se o prefixo não for usado durante a associação:
public IActionResult Get(SearchModel model)
{
    ...
}

Renomear um parâmetro em um tipo público pode ser considerado uma alteração interruptiva, pois ele altera a superfície de API pública de uma biblioteca.

  • Se isso for problemático, considere o uso de um atributo de associação de modelo, como Bind para especificar o prefixo de associação de modelo:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Quando suprimir avisos

Os avisos poderão ser suprimidos se você pretende usar o nome do parâmetro como um prefixo durante a associação de modelo.