ASP .NET Core - Atributos do Model Binding
![]() |
Este artigo vou apresentar os principais atributos usados no Model Binding da ASP .NET Core. |
Comportamento padrão do Model Binder
O comportamento padrão do model binder (vinculador do
modelo) é que ele primeiro procura dados no
formulário postado. Se ele não encontrou nenhum dado no
formulário ele procura por dados no valor do roteamento
e, finalmente, ele procura dados em cadeias de consulta.
Por exemplo, se tivermos uma URL assim : Produtos/Detalhe/2?Id=4
O número 2 será vinculado, pois é a nossa variável de rota, mas podemos alterar essas prioridades, especificando exatamente de onde queremos que nossos dados sejam provenientes; Além disso, estes não são os únicos lugares dos quais podemos receber nossos dados.
A Asp.Net Core também nos dá a capacidade de receber dados de cabeçalhos HTTP.
Vejamos os atributos que podemos usar para direcionar o comportamento do model binding padrão.
Usando os atributos
1- FromForm
Este atributo faz com que o Model Binder utilize somente os dados recebidos do formulário enviado.
public IActionResult Detail([FromForm] ProdutoViewModel produtoViewModel) => View(produtoViewModel);
2- FromRoute
Este atributo faz com que o Model Binder apenas vincule dados que são oriundos da rota de dados
public IActionResult Detail([FromRoute] int id) => View();
3- FromQuery
Este atributo diz ao Model Binder para receber apenas os dados da cadeia de consulta (querystring).
public IActionResult Detail([FromQuery] int id) => View();
Se fizermos uma solicitação com a URL: Produto/Detalhe/2?Id=4
O valor 4 será vinculado e não o valor 2 conforme seria previsto no comportamento padrão.
4- FromHeader
Este atributo diz ao Model Binder para vincular os valores que vêm no cabeçalho da requisição HTTP.
5- FromBody
Este atributo diz ao Model Binder para vincular dados a partir do Body do request.
public IActionResult Detail([FromBody] ProdutoViewModel produtoViewModel) => View(produtoViewModel);
6- FromServices
Este atributo vincula o valor especificado à implementação que foi configurada no seu container de injeção de dependência.
public IActionResult Detail([FromServices] IPrintable printer) => View();
7- Bind e BindNever
Este atributo vincula o valor especificado à implementação que foi configurada no seu container de injeção de dependência.
O atributo BindNever diz ao model binder que não deve vincular o atributo especificado.
Como você pode ver no trecho de código abaixo, IsAdminUser nunca será vinculado.
Esta abordagem pode ser chamada de propriedades de lista negra, o que não é uma boa prática de segurança.
É
melhor
listar os atributos que queremos
vincular usando o atributo Bind, deixando de fora os que não
queremos, como você pode ver no exemplo:
BindNever | Bind |
public class
ProdutoViewModel { [FromQuery] public int ProdutoId { get; set; } public string ProdutoName { get; set; } [BindNever] public string IsAdminUser { get; set; } } |
[Bind(nameof(ProdutoId), nameof(ProdutoNome))] public class ProdutoViewModel { [FromQuery] public int ProdutoId { get; set; } public string ProdutoNome { get; set; } public string IsAdminUser { get; set; } } |
Podemos usar todos esse atributos nas propriedades da nossa classe e não somente usá-los diretamente na lista de parâmetro da Action.
Até o próximo artigo...
"Se dissermos
que temos comunhão com ele (Deus), e andarmos em trevas, mentimos, e não
praticamos a verdade."
1 João 1:6
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013/VS 2015 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-net-core-2-0/