Consuming a Web Service Asp .Net application Xamarin

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 is this:

    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 "source and destination" are being filled correctly, the URL is also correct, when I run the application and get to that part it gives me an exception HttpRequestException . Thanks in advance to 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;

        }
    
asked by anonymous 18.06.2018 / 14:40

1 answer

2

I think the problem may be in the way you are creating your HttpClient .

You can try this:

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 you add the property BaseAddress and DefaultRequestHeaders to your HttpClient object.

In addition, I put it inside try catch to help identify the error that is happening.

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

EDIT

After talking to Wesley through the discussion chat we were able to identify the error and made some changes to 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.

    
18.06.2018 / 14:50