Partilhar via


MVC1004: Renomear parâmetro limitado ao modelo

Valor
ID da regra MVC1004
A correção é invasiva ou não invasiva Última hora

Motivo

Um parâmetro limitado ao modelo tem o mesmo nome que uma das suas propriedades.

Descrição da regra

A ligação de modelos a um parâmetro complexo com uma propriedade com o mesmo nome pode resultar em comportamentos de ligação inesperados. Considere renomear o parâmetro ou usar um atributo de ligaçã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; }
}

Neste modelo, o parâmetro e a sua propriedade têm ambos o nome Search, o que faz com que a ligação do modelo tente associar a propriedade a search.Search. Nomear um parâmetro e a sua propriedade da mesma forma impede a ligação a um valor sem prefixo, como uma consulta que se assemelhe a ?search=MySearchTerm.

Como corrigir violações

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

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

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

Quando suprimir avisos

Os avisos podem ser suprimidos se pretender usar o nome do parâmetro como prefixo durante a ligação do modelo.