Consuming a Web Service Asp . Net Xamarin application

Asked

Viewed 73 times

2

I want to make a request to a Web Service developed in Asp . Net passing two parameters to my server. The controller in the web Service this asism:

    public HttpResponseMessage Get(string id1, string id2)
    {
        try
        {
            var destinoDao = new DestinoDAO();

            var destinos = destinoDao.ListaCidadesDestino(id1, id2);

            return Request.CreateResponse(HttpStatusCode.OK, destinos);
        }
        catch
        {
            var mensagem = "Não foram encontrados destinos com os valores digitados.";

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

The method in Xamarin is as follows:

    public async Task GetLista()
    {
        aguarde = true;

            HttpClient cliente = new HttpClient();

            var resultado = await cliente.GetStringAsync(urlBuscaDestino + origem + destino);
            var buscaJson = JsonConvert.DeserializeObject<BuscaJson[]>(resultado);

            foreach (var destino in buscaJson)
            {
                this.ListaDestinos.Add(new Destinos
                {
                    linha = destino.linha,
                    nome = destino.nomeEmpresa,
                    origem = destino.origem,
                    destino = destino.destino,
                    municipio = destino.municipio
                });
            }

        aguarde = false;
    }

Remarks: the variables "origin and destination" are being filled in correctly, the URL is also correct, when I run the application and get to that part it gives me an Exception HttpRequestException. From now on I thank anyone who can help.

EDIT

Controller:

namespace WebServiceAraguaina.Controllers
{
    public class BuscaDestinoController : ApiController
    {

        public HttpResponseMessage Get(string id1, string id2)
        {
            try
            {
                var destinoDao = new DestinoDAO();

                var destinos = destinoDao.ListaCidadesDestino(id1, id2);

                return Request.CreateResponse(HttpStatusCode.OK, destinos);
            }
            catch
            {
                var mensagem = "Não foram encontrados destinos com os valores digitados.";

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

DAO:

 public IList<BuscaDestino> ListaCidadesDestino(string origem, string destino)
        {

            var selectCMD = dao.conexao.CreateCommand();
            selectCMD.CommandText = "SELECT DISTINCT (lin.Cd_Cod_Linha) as Linha, emp.Ds_NomeFantasia AS Empresa, " +
                                    "lin.Ds_Cidade_Origem as Origem, lin.Ds_Cidade_Destino as Destino, " +
                                    "mun.Ds_Municipio as Municipios from Cd_Linha lin left join " +
                                    "Cd_Empresa emp on lin.Cd_Empresa = emp.Cd_Empresa left join " +
                                    "Cd_Paradas par on emp.Cd_Empresa = par.Cd_Empresa left join " +
                                    "Cd_Municipios mun on par.Cd_Cod_Municipio = mun.Cd_Cod_Municipio " +
                                    "where  LTRIM(RTRIM(Ds_Cidade_Origem)) = @Ds_Cidade_Origem and " +
                                    "LTRIM(RTRIM(Ds_Cidade_Destino)) = @Ds_Cidade_Destino";


            var paramOrigem = new SqlParameter("Ds_Cidade_Origem", Convert.ToString(origem));
            selectCMD.Parameters.Add(paramOrigem);

            var paramDestino = new SqlParameter("Ds_Cidade_Destino",Convert.ToString(destino));
            selectCMD.Parameters.Add(paramDestino);

            var ListaDestinos = new List<BuscaDestino>();
            var resultado = selectCMD.ExecuteReader();


            while (resultado.Read())
            {
                var cidadeDestino = new BuscaDestino();
                cidadeDestino.Cod_Linha = Convert.ToString(resultado["Cod_Cod_Linha"]);
                cidadeDestino.Ds_NomeFantasia = Convert.ToString(resultado["Ds_NomeFantasia"]);
                cidadeDestino.Ds_Cidade_Origem = Convert.ToString(resultado["Ds_Cidade_Origem"]);
                cidadeDestino.Ds_Cidade_Destino = Convert.ToString(resultado["Ds_Cidade_Destino"]);
                cidadeDestino.Municipio = Convert.ToString(resultado["Ds_Municipio"]);


                ListaDestinos.Add(cidadeDestino);
            }

            resultado.Close();

            return ListaDestinos;

        }
  • You could put the URL you are trying to access and the route to your method?

1 answer

2


I believe the problem may be in the way you’re creating your HttpClient.

You can try it this way:

public async Task GetLista()
{
    try
    {
        aguarde = true;

        HttpClient cliente = new HttpClient();
        cliente.BaseAddress = new Uri("http://www.acessoseg.com.br/webservicearaguaina/api/");
        cliente.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        string url = $"buscaDestino/{origem}/{destino}";

        var resultado = await cliente.GetStringAsync(url);
        var buscaJson = JsonConvert.DeserializeObject<BuscaJson[]>(resultado);

        foreach (var destino in buscaJson)
        {
            this.ListaDestinos.Add(new Destinos
            {
                linha = destino.linha,
                nome = destino.nomeEmpresa,
                origem = destino.origem,
                destino = destino.destino,
                municipio = destino.municipio
            });
        }

        aguarde = false;
    }
    catch (Exception ex)
    {
        // Exceção gerada
    }
}

Note that add property BaseAddress and DefaultRequestHeaders to its object HttpClient.

Besides, I put inside a try catch to help identify the error that is happening.

You can put a breakpoint within the catch and identify what is actually happening if the error persists.

EDIT

After talking to Wesley through discussion chat we were able to identify the error and made some modifications in Controller of API.

[Route("api/BuscaDestino/{id1}/{id2}")]
public IHttpActionResult GetBuscaDestino(string id1, string id2)
{
    try
    {
        var destinoDao = new DestinoDAO();

        var destinos = destinoDao.ListaCidadesDestino(id1, id2);

        return Ok(destinos);
    }
    catch
    {
        var mensagem = "Não foram encontrados destinos com os valores digitados.";

        return Ok(mensagem);
    }
}

Once this was done, the method began to return what was expected.

  • Hello, sorry to bother you again, but Oce could tell me how Oce did to test web service that time?

  • Get in the chat room there!

  • could post the link again, from chat

  • is up there "continue discussion in chat"

Browser other questions tagged

You are not signed in. Login or sign up in order to post.