Aplicação ASP.NET MVC Cliente de Aplicação Web...

Click here to load reader

  • date post

    29-Jul-2018
  • Category

    Documents

  • view

    215
  • download

    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