ASP.NET Core - Como funciona o Model Binding
Hoje vamos apresentar os conceitos do Model Binding na ASP .NET Core. |
O model binding da ASP.NET Core mapeia dados de requisições HTTP para parâmetros dos métodos Action dos controladores.
Os parâmetros podem ser tipos simples, como cadeias de caracteres, inteiros ou floats, ou podem ser tipos complexos como objetos e tipos personalizados. Esse é um ótimo recurso do MVC, pois o mapeamento dos dados de entrada para um equivalente é um cenário repetido com frequência, independentemente do tamanho ou da complexidade dos dados.
O MVC resolve esse problema com a abstração da associação, de modo que os desenvolvedores não precisam continuar reconfigurando uma versão ligeiramente diferente desse mesmo código em cada aplicativo. Escrever o seu próprio código para tipar o código de conversor é entediante e propensa a erros.
Como funciona ?
O Model Binding é o processo pelo
qual o ASP.NET Core MVC recebe uma solicitação HTTP e "liga" partes
dessa solicitação, bem como outras fontes de dados, a entradas (por
exemplo, parâmetros) em uma Action do controlador. Por exemplo, vamos
ver um URL simples:
http://www.meusite.com/blog/posts/5
Sabemos que esse URL está tentando recuperar a postagem do blog com o ID
5 da seção /blog do meusite.com. Mas o ASP.NET não tem como saber quais
são as nossas intenções e, portanto, usa a vinculação de modelo para
analisar a URL. Por padrão, o ASP.NET Core MVC usa a seguinte rota para
mapear URLs de entrada:
{controller}/{action}/{id?}
E assim, a URL acima seria mapeado para a Action Posts do
controlador
BlogController, passando um parâmetro com o nome
id e o valor
5.
Data Sources ou Fonte de dados
O MVC tentará associar os dados de requisição aos parâmetros de Action por nome e vai procurar valores para cada parâmetro usando o nome do parâmetro e os nomes de suas propriedades configuráveis públicas.
No exemplo acima, o único parâmetro de ação é chamado id, que o MVC associa ao valor com o mesmo nome nos valores de rota. Além dos valores de rota, o MVC associará dados de várias partes da solicitação e faz isso em uma ordem específica. Veja abaixo uma lista das fontes de dados na ordem em que o model binding as examina:
Sendo que os valores de formulário, dados de rota e cadeias de consulta são todos armazenados como pares nome-valor.
Vinculação de tipos Complexos
Para fazer a vinculação de tipos complexos como classe de domínio a ASP .NET Core usa Reflection e Recursão para percorrer as propriedades dos tipos procurando por correspondências.
Ele procura o padrão nome_do_parâmero.nome_da_propriedade para associar valores às propridades.
Considere a seguinte classe de domínio em uma aplicação ASP .NET Core:
public class Usuario { public string Nome {get; set; } } |
Agora considere a seguinte URL correspondente:
https://www.meusite.com/usuarios/create?nome=Macoratti
O model binding vai usar Reflection para descobrir que a classe Usuario tem uma propridedade Nome e vai vincular a ela o valor do parâmetro nome que é 'Macoratti' encontrado na string de consulta.
Assim, o model binding atua de forma flexível e poderosa para atender à maioria das necessidades.
Dessa forma o comportamento padrão do Model Binding ocorre quando nenhum atributo estiver sendo usado e é o seguinte:
Agora, se você quiser mudar, ou estender, esse comportamento, pode usar os atributos do Model Binding.
Customizando o Model Binding com atributos
Podemos usar Atributos nos métodos Action para sobrescrever o comportamento padrão do Model Binding.
Além da metodologia de vinculação padrão, o ASP.NET Core oferece uma maneira mais personalizada de realizar o model binding usando atributos que vão sobrescrever o comportamento padrão.
A seguir temos alguns dos atributos oferecidos pelo ASP.NET Core :
Comportamento do Model Binding com alguns atributos
Vejamos agora como o Model Binding atua quando usamos alguns dos atributos elencados acima.
1 - Atributo [FromHeader] - Binding Header
A vinculação aos cabeçalhos HTTP (Http headers) merece os seguintes destaques:
Para tipos complexos, o atributo [FromHeader] é aplicado às propriedades do tipo.
Se o cabeçalho HTTP contiver caracteres ilegais para nomes de variáveis, eles podem ser fornecidos através da propriedade Name dos atributos.
public class Demo { [FromHeader] public string Host { get; set; } [FromHeader(Name="User-Agent)] public string UserAgend { get; set; } } |
2 - Atributo [FromBody] - Binding Body
O corpo da resposta HTTP pode ser lido em um tipo complexo.
Por padrão, a classe JsonInputFormatter é usada para manipular a vinculação do corpo da solicitação. Os formatadores de entrada são usados com base na propriedade Content-Type do cabeçalho de requisição HTTP. Abaixo está uma requisição de exemplo com o corpo JSON.
{ "nome" : "macoratti" "email" : "macoratti@yahoo.com } |
Se você quiser trocar de JSON para XML o valor da entrada, precisa modificar o formatador o método ConfigureServices:
|
Após esse ajuste você pode enviar dados no corpo da requisição no formato XML.
Veja como customizar globamente o comportamento do model binding neste artigo: Personalizar o Model Binding
E por hoje era isso...
(disse Jesus) - "Porque
por tuas palavras serás justificado, e por tuas palavras serás condenado."
Mateus 12:37
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core - Macoratti
Conceitos - .NET Framework versus .NET Core - Macoratti
ASP .NET Core - Conceitos Básicos - Macoratti.net
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti.net
ASP .NET Core - Apresentando Razor Pages - Macoratti
Minicurso ASP .NET Core 2.0 - Autenticação com JWT - I - Macoratti
Minicurso ASP .NET Core 2.0 - Autenticação com JWT - II - Macoratti.net