4
respostas

Consumindo web api com webform

como poderia consumir essa aplicação que consumimos ni console , gostaria de consumi-la em uma aplicação webform

4 respostas

Olá, Alex!

Eu poderia explicar aqui, mas acho que você vai gostar mais deste tutorial simples de Mike Wasson:

"Using Web API with ASP.NET Web Forms" https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/using-web-api-with-aspnet-web-forms

O que ele faz é preparar o projeto Web Forms para consumir os serviços do Web API através de AJAX. É isso que você tem em mente?

Boa sorte e bons estudos!

Bom dia, Marcelo, então esse exemplo que vc indicou do Mike Wasson e bacana porem muito simples, O que e Utilizado aqui no curso e muito mais detalhado só que e consumindo com o a aplicação Console. Estou querendo me aperfeiçoar em WEB API, principalmente consumindo em uma aplicação webForm, gostaria de um crud Completo em API, assim como foi feito no curso. Vou mostrar meu código do Controle , mais o método de Inserir e Pesquisar e alterar não esta funcionando no Web Forms. Controller

 using System;
using System.Data.Entity.Infrastructure;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Providers.Entities;
using Dao;
using Microsoft.Ajax.Utilities;
using Model;

namespace WebApiX1.Controllers
{
    public class ClienteController : ApiController
    {
        // GET: api/Cliente
        public IHttpActionResult Get()
        {
            try
            {
                return Ok(new DaoCliente().Listar());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }

        // GET: api/Cliente/5
        public IHttpActionResult Get(int id)
        {
            DaoCliente cliente = new DaoCliente();

            if (cliente.Obter(id) == null)
            {
                return NotFound();
            }
            return Ok(new DaoCliente().Obter(id));
        }

        // POST: api/Cliente
        public IHttpActionResult Post([FromBody]DaoCliente daoCliente, Cliente cliente)
        {
            try
            {
                daoCliente.Incluir(cliente);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return Ok();
        }

        // PUT: api/Cliente/5
        public HttpResponseMessage PutCliente(int id, Cliente cliente)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            if (id != cliente.IdCliente)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }

            try
            {
                new DaoCliente().Alterar(cliente);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }

            return Request.CreateResponse(HttpStatusCode.OK);
        }

        // DELETE api/Usuario/5
        public HttpResponseMessage DeleteCliente(int id)
        {
            DaoCliente cliente = new DaoCliente();

            if (cliente.Obter(id) == null)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }
            try
            {
                cliente.Excluir(id);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }

            return Request.CreateResponse(HttpStatusCode.OK, cliente);
        }


    }
}

Webform

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Web.Script.Serialization;
using System.Web.UI.WebControls;
using Dao;
using Model;
using WebApiX1.Models;

namespace SGClienteWeb
{
    public partial class CadCliente : System.Web.UI.Page
    {
        HttpClient client;
        Uri clienteUri;

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

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                CarregarDropDownListTipoCliente();
                CarregarDropDownListSituacao();
                CarregargdvClientes();

            }
        }

        private void CarregargdvClientes()
        {

            //chamando a api pela url
            HttpResponseMessage response = client.GetAsync("api/cliente").Result;

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

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

                //preenchendo a lista com os dados retornados da variável
                var listaClientes = clientes
                    .Select(cliente => new
                    {
                        idCliente = cliente.IdCliente,
                        nome = cliente.Nome,
                        cpf = cliente.Cpf,
                        sexo = cliente.Sexo,
                        idTipoCliente = cliente.TipoCliente.IdTipoCliente,
                        descricao = cliente.TipoCliente.Descricao,
                        idSituacaoCliente = cliente.SituacaoCliente.IdSituacaoCliente,
                        descricaoSituacaoCliente = cliente.SituacaoCliente.Descricao,

                    })
                    .ToList();
                gdvClientes.DataSource = listaClientes;
                gdvClientes.DataBind();
            }

            //Se der erro na chamada, mostra o status do código de erro.
            else
                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase);
        }

        private void CarregarDropDownListSituacao()
        {  //chamando a api pela url
            HttpResponseMessage response = client.GetAsync("api/situacao").Result;

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

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

                //preenchendo a lista com os dados retornados da variável

                ddlSituacao.DataSource = situacaClientes;
                ddlSituacao.DataBind();

                ListItem ltiSelecioneSituacao = new ListItem(" Selecione ", "-1");
                ddlSituacao.Items.Insert(0, ltiSelecioneSituacao);
                ddlSituacao.DataValueField = "Descricao";
                ddlSituacao.DataSource = situacaClientes;
            }
        }

        private void CarregarDropDownListTipoCliente()
        {
            //chamando a api pela url
            HttpResponseMessage response = client.GetAsync("api/tipocliente").Result;

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

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

                //preenchendo a lista com os dados retornados da variável

                ddlTipoCliente.DataSource = tipoClientes;
                ddlTipoCliente.DataBind();

                ListItem ltiSelecioneTipo = new ListItem(" Selecione ", "-1");
                ddlTipoCliente.Items.Insert(0, ltiSelecioneTipo);
                ddlTipoCliente.DataValueField = "Descricao";
                ddlTipoCliente.DataSource = tipoClientes;
            }
        }
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                using (HttpClient client = new HttpClient())
                {
                    client.BaseAddress = new Uri("http://localhost:2200/CadCliente/api/cliente");

                    Cliente cliente = new Cliente()
                    {
                        Nome = txtNome.Text,
                        Cpf = txtCpf.Text,
                        Sexo = ddlSexo.Text,
                        TipoCliente = { IdTipoCliente = Convert.ToInt32(ddlTipoCliente.SelectedIndex) },
                        SituacaoCliente = { IdSituacaoCliente = Convert.ToInt32(ddlSituacao.SelectedIndex) }
                    };
                    var resp = client.PostAsJsonAsync("", cliente);
                }

                String mensagem = "Dados Inseridos com Sucesso";

                ClientScript.RegisterClientScriptBlock(this.GetType(), "MensagemDeAlert", "alert('" + mensagem + "');", true);
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
                throw;
            }
        }

        protected void btPesquisar_Click(object sender, EventArgs e)
        {

        }

        protected void gdvClientes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Atualizar")
            {
                int index = int.Parse((String)e.CommandArgument);
                var clientesDataKey = gdvClientes.DataKeys[index];
                if (clientesDataKey != null)
                {
                    string chave = clientesDataKey["idCliente"].ToString();
                    string nome = Server.HtmlDecode(gdvClientes.Rows[index].Cells[1].Text);

                    hdId.Value = chave;
                    txtNome.Text = nome;
                }
                txtNome.Focus();
            }

            if (e.CommandName == "Excluir")
            {
                int _index = int.Parse((String)e.CommandArgument);
                var gdvClientesDataKey = gdvClientes.DataKeys[_index];
                if (gdvClientesDataKey != null)
                {
                    string chave = gdvClientesDataKey["idCliente"].ToString();

                    Delete(int.Parse(chave));
                }               
            }
        }

        private void Delete(int Id)
        {
            System.Net.Http.HttpResponseMessage response = client.GetAsync("api/cliente/" + Id).Result;
            response = client.DeleteAsync("api/cliente/" + Id).Result;

            if (response.IsSuccessStatusCode)
                clienteUri = response.Headers.Location;
            else
                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase.ToString());
            CarregargdvClientes();
        }

        protected void cmdAtualizar_Click(object sender, EventArgs e)
        {
            update(int.Parse(hdId.Value), txtNome.Text);
        }

        private void update(int _Id, String _nome)
        {
            var clientes = new User() {Id = _Id,Nome = _nome};
            System.Net.Http.HttpResponseMessage response = client.GetAsync("api/cliente").Result;
            response = client.PutAsJsonAsync("api/cliente/" + _Id, clientes).Result;

            if (response.IsSuccessStatusCode)
                clienteUri = response.Headers.Location;
            else
                Response.Write(response.StatusCode.ToString() + " - " + response.ReasonPhrase.ToString());

            CarregargdvClientes();
        }

    }


}

Oi Alex!

Agora entendi, você precisa que as chamadas sejam feitas a partir do code behind (aspx.cs) do projeto Web Forms.

Pelo que vi já está usando HttpClient, que é jusamente o que eu ia sugerir. Esse é o caminho. Você está tendo dificuldade em usar o HttpClient?

Isso mesmo Marcelo, Não estou conseguindo atualizar e inserir um novo cliente VIA API, O Erro ta no metodo do controle ou no code behind?