Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| 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
Bindpara 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.