Aplicação ASP.NET MVC Cliente de Aplicação Web...
date post
29-Jul-2018Category
Documents
view
215download
0
Embed Size (px)
Transcript of Aplicação ASP.NET MVC Cliente de Aplicação Web...
Aplicao ASP.NET MVC Cliente de Aplicao Web API (com Class Library)
http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client
Calling a Web API From a .NET Client in ASP.NET Web API 2 (C#)
Vamos criar:
uma Class Library com o modelo de dados,
uma Aplicao Web API 2 com uma Referncia para a Class Library, e
uma Aplicao Web MVC 5 tambm com uma Referncia para a Class Library, cliente da aplicao Web API 2
As vantagens de usar Class library so a reutilizao do componente e a garantia de que as
classes do modelo de dados so iguais nas duas aplicaes web.
Estes trs projetos podem ser criados numa mesma Soluo Visual Studio ou em Solues
diferentes.
Numa mquina menos potente aconselhvel criar uma nica Soluo para todos os projetos
pois permite executar cliente e servidor tendo apenas uma nica instncia do Visual Studio
aberta.
1. Criar a Soluo
Visual Studio 2015 > File > New Project > Templates: abrir Other Project Types > Visual Studio Solutions > Blank Solution Name: Livros
2. Criar a Class Library Bt. dir. do rato em cima do nome da soluo:
Add > New Project > Visual C# > Class Library
Name: ClassLibraryLivros
OK
3. Criar a Aplicao ASP.NET Web API 2
Bt. dir. do rato em cima do nome da soluo:
Add > New Project > Web > ASP.NET Web Application Name: WebApiLivros OK ASP.NET 4.6 Templates: Web API OK
4. Criar a Aplicao ASP.NET MVC 5 (Cliente da Aplicao Web API 2)
Bt. dir. do rato em cima do nome da soluo:
Add > New Project > Web > ASP.NET Web Application Name: ClienteMvcLivros OK ASP.NET 4.6 Templates: MVC OK
http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client
Em seguida vamos criar Solues diferentes para cada projeto.
1. Criar a Class Library
Visual Studio 2015 > File > New > Project Visual C# > Class Library [ Type: Visual C#, A project for creating a C# class library (.dll) ]
Name: ClassLibraryLivros
1.1. Adicionar as classes Editora e Livro
ClassLibraryLivros > boto direito do rato em cima do nome do projeto: Add > Class > Name: Editora.cs Add public class Editora { public int EditoraId { get; set; } public string Nome { get; set; } }
Add > Class > Name: Livro.cs Add public class Livro { public int LivroId { get; set; } public string Titulo { get; set; } public int EditoraId { get; set; } public Editora Editora { get; set; } }
1.2. Build da Soluo
Build > Build Solution
2. Criar a Aplicao Asp.Net Web API 2
Visual Studio 2015 > File > New > Project Visual C#, Web > ASP.NET Web Application (.NET Framework)
Name: WebAPILivros
ASP.NET 4.6 Templates: Web API Authentication: Individual User Accounts OK
2.1 Adicionar uma Referncia para a biblioteca ClassLibraryLivros
Adicionar o projeto ClassLibraryLivros soluo Visual Studio:
Solution WebAPILivros (1 project) > bt. dir. do rato
Add > Existing Project > ClassLibraryLivros.csproj > Abrir
Solution WebAPILivros (2 projects)
Adicionar uma referncia da aplicao WebAPILivros para a biblioteca ClassLibraryLivros:
WebAPILivros > bt. dir. do rato > Add > Reference
Projects, Solution > selecionar ClassLibraryLivros > OK
2.2 Build da Aplicao
Necessrio para em seguida o scaffolding poder usar as classes do modelo e do contexto.
Build > Build Solution
2.3 Scaffolding para criar Controladores para as entidades Editora e Livro
Controllers > boto direito do rato: Add > Controller >
Add Scaffold: Web API 2 Controller with actions, using Entity Framework > Add
Model class: Editora (ClassLibraryLivros) Data context class: ApplicationDbContext (WebApiLivros.Models) Use async controller actions Controller name: EditorasController Add
Controllers > boto direito do rato: Add > Controller >
Add Scaffold: Web API 2 Controller with actions, using Entity Framework > Add
Model class: Livro (ClassLibraryLivros) Data context class: ApplicationDbContext (WebApiLivros.Models) Use async controller actions Controller name: LivrosController Add
2.4 Verificar a criao de objetos DbSet para acesso base de dados (na classe ApplicationDbContext)
No ficheiro Models\IdentityModels.cs aparecem 2 propriedades DbSet: Editoras e Livroes.
public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } public System.Data.Entity.DbSet Editoras { get; set; } public System.Data.Entity.DbSet Livroes { get; set; } }
2.5 Criar a base de dados com Migraes (ou executando a aplicao)
Criar a base de dados com Migraes:
Visual Studio 2015 > Tools > Nuget Package Manager > Package Manager Console
PM> enable-migrations
PM> add-migration Initial
PM> update-database
2.6 Executar a aplicao ou testar com Postman
Debug > Start Without Debugging Na barra de endereos do browser acrescentar /api/Editoras ou /api/Livros localhost:xxxxx/api/Editoras localhost:xxxxx/api/Livros
3. Criar a Aplicao ASP.NET MVC 5 (Cliente da Aplicao Web API 2)
Visual Studio 2015 > File > New Project > Web > ASP.NET Web Application Name: ClienteMvcLivros OK ASP.NET 4.6 Templates: MVC OK
3.1 Adicionar uma Referncia para a biblioteca ClassLibraryLivros
Adicionar o projeto ClassLibraryLivros soluo Visual Studio:
Solution ClienteMvcLivros (1 project) > bt. dir. do rato
Add > Existing Project > ClassLibraryLivros.csproj > Abrir
Solution ClienteMvcLivros (2 projects)
Adicionar uma referncia da aplicao ClienteMvcLivros para a biblioteca ClassLibraryLivros:
ClienteMvcLivros > bt. dir. do rato > Add > Reference
Projects, Solution > selecionar ClassLibraryLivros > OK
3.2 Build da Aplicao
Necessrio para em seguida o scaffolding poder usar as classes do modelo e do contexto.
Build > Buil Solution
3.3 Scaffolding para criar Controladores e Vistas Controllers > boto direito do rato: Add > Controller >
Add Scaffold: MVC 5 Controller with views, using Entity Framework > Add
Model class: Editora (ClassLibraryLivros) Data context class: ApplicationDbContext (ClienteMvcLivros.Models) Use async controller actions Controller name: EditorasController Add
Controllers > boto direito do rato: Add > Controller >
Add Scaffold: MVC 5 Controller with views, using Entity Framework > Add
Model class: Livro (ClasLibraryLivros) Data context class: ApplicationDbContext (ClienteMvcLivros.Models) Use async controller actions Controller name: LivrosController Add
3.4 Alterar a classe EditorasController
Para que esta classe possa fazer pedidos ao servio Web API necessitmos de um cliente. A
classe HttpClient pode ser usada quer para aplicaes Web, aplicaes de Consola ou
aplicaes mveis.
Como vamos necessitar desta classe em todas as aes de todos os controladores vamos
escrever uma classe helper para inicializar este cliente.
3.4.1 Criar uma pasta Helpers para conter a classe de acesso Web API
ClienteMvcLivros> boto direito do rato: Add > New Folder > Helpers
Helpers > boto direito do rato: Add > Class > Name: WebApiHttpClient.cs Add
using System; using System.Net.Http;
namespace ClienteMvcLivros.Helpers { public class WebApiHttpClient { public const string WebApiBaseAddress = "http://localhost:1742/"; public static HttpClient GetClient() { HttpClient client = new HttpClient(); client.BaseAddress = new Uri(WebApiBaseAddress); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); return client; } } } Necessrio mudar a localizao do servio Web API na constante WebApiBaseAddress.
Configurmos no objeto HttpClient:
a propriedade BaseAddress com o endereo do servio Web API
a propriedade DefaultRequestHeaders para que o formato da resposta do servio seja
apenas o formato JSON. Comemos por fazer Clear() e depois adicionmos o formato
"application/json"
3.4.2 Classe EditorasController
using System.Collections.Generic; using System.Threading.Tasks; using System.Net; using System.Web.Mvc; using ClienteMvcLivros.Models; using ClienteMvcLivros.Helpers; using System.Net.Http; using Newtonsoft.Json;
using ClassLibraryLivros;
namespace ClienteMvcLivros.Controllers { public class EditorasController : Controller { // private ApplicationDbContext db = new ApplicationDbContext(); // GET: Editoras
. . .
3.4.3 Mtodo Index de EditorasController
Inicial: // GET: Editoras public async Tas