Desenvolvimento - C#

Consumindo um Web API em C#

Veja nesse artigo como pegar os dados de um Web API de forma correta e preencher um GridView ou DataList dinamicamente.

por Mauricio Junior



Introdução

Olá pessoal, hoje eu vou falar e mostrar como consumir Web API de forma simples e fácil. Depois de ter o Web API gerado e com os dados, é necessário consumir e esse consumo pode ser de todas as partes, por exemplo: Web Site, smartphone, TV, Tablets e mais. Isso porque os dados trafegados utilizam REST e Json. Agora vamos consumir esse Web API usando a linguagem C# .NET.

Esse link pode te ajudar a entender melhor sobre Web API: http://www.linhadecodigo.com.br/artigo/3655/criando-um-web-api-em-csharp.aspx

Utilizado neste artigo:

  • Ferramenta Visual Studio 2012
  • Linguagem de programação C#
  • Tecnologia utilizada, WebForm, Web API, Rest e Json.

Neste artigo eu vou mostrar como pegar os dados de um Web API de forma correta e mostrar como preencher um GridView ou DataList dinamicamente, ou seja, vamos usar o método GET. Em outros artigos eu mostro como fazer PUT, DELETE e POST dos dados.

Você pode consumir o método GET usando o mesmo projeto, mas o ideal é criar um novo projeto do tipo WebForm para consumir o Rest. Como falei anteriormente no artigo sobre Como criar um WebAPI em C#, o Web API veio para substituir o Web Service que se tornou lento mediante a nova tecnologia.

Primeiro passo

Criar um novo projeto do tipo WebForm, o mais comum entre os desenvolvedores de software, usando a linguagem C# ou VB. Dentro da página default.aspx e na parte de HTML, coloquei o objeto GridView. Esse objeto traz apenas o nome do usuário vindo do Rest consumido.

Listagem 1: Lista de usuário

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
       	<asp:BoundField DataField="Id" HeaderText="Id" />
              <asp:BoundField DataField="Nome" HeaderText="Nome" />
</Columns>
</asp:GridView>

Agora temos que preencher esse GridView com os dados vindo do Rest criado no artigo parte 1.

Segundo passo

O segundo passo é feito dentro da linguagem C#, neste caso o default.aspx.cs. Primeiro declarei duas variáveis. Uma do System.Uri e outra do System.Net.Http.

Listagem 2: Declaração de variável

HttpClient client;
Uri usuarioUri;

Agora no construtor do método é necessário indicar o endereço do site e o tipo de retorno, que no nosso caso é o Json.

Listagem 3: Construtor

public _default()
{
if (client == null)
       {
       	client = new HttpClient();
              client.BaseAddress = new Uri("http://localhost:1020");
              client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
}
}

Note que na listagem 3, o tipo do cabeçalho do Rest é o application/json baseado no HttpClient().

No Page_Load da classe default.cs eu chamei outro método chamado getAll. Listagem 4. O método getAll() busca através do Web API o link e os dados para preencher o GridView.

Listagem 4: Page_Load

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
       {
       	getAll();
}
}

Passando para o método getAll(), a chamada da url se torna simples e os dados retornados são pegos através de um Enumerable. Listagem 5.

Listagem 5: Chamando o rest e preenchendo o grid

private void getAll()
        {
//chamando a api pela url
            System.Net.Http.HttpResponseMessage response = client.GetAsync("api/usuario").Result;

		//se retornar com sucesso busca os dados
            if (response.IsSuccessStatusCode)
            {
		  //pegando o cabeçalho
                usuarioUri = response.Headers.Location;

		  //Pegando os dados do Rest e armazenando na variável usuários
                var usuarios = response.Content.ReadAsAsync<IEnumerable<Usuario>>().Result;

		   //preenchendo a lista com os dados retornados da variável
                GridView1.DataSource = usuarios;
                GridView1.DataBind();
            }
		
              //Se der erro na chamada, mostra o status do código de erro.
else
                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase);
        }

Em cada linha da listagem 5 existe uma explicação simplificada do que é feito. O resultado final dessa chamada é o grid preenchido rapidamente. Imagem 1.

ID Nome
203 Mauricio 17
204 Mauricio 1888
208 Mauricio 22
209 Mauricio 23
211 Mauricio 25
212 Mauricio 26
213 Mauricio 27
214 Mauricio 28
215 Mauricio 29
234 Mauricio 48
235 Mauricio 49
237 Mauricio Junior1
255 Mauricio Junior19
263 Mauricio Junior27
264 Mauricio Junior28
265 Mauricio Junior29
266 Mauricio Junior30
267 Mauricio Junior31
268 Mauricio Junior32
269 Mauricio Junior33

Tabela 1: Grid preenchido pelo Rest

Lembre-se que para preencher o grid, os dados retornados do Web API devem ser iguais as propriedades do GridView dentro da sua página, pelo contrários pode dar erro no momento de preencher o objeto na tela.

Conclusão

Espero que tenha gostado e em breve publico mais um artigo falando e mostrando como excluir, incluir e pesquisar algum dado usando o Rest e Web API da Microsoft. Qualquer dúvida, pode entrar em contato pelo site www.mauriciojunior.org .

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org