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.