none
Request via HttpClient com vários Headers RRS feed

  • Pergunta

  • Bom dia. Preciso fazer uma requisição POST passando vários Headers. Na API do desenvolvedor tem um exemplo utilizando RestClient, que segue abaixo.

    var client = new RestClient("https://integracao.meuspedidos.com.br/api/v1/clientes");
    var request = new RestRequest(Method.POST);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("ApplicationToken", "SEU_APPLICATION_TOKEN_AQUI");
    request.AddHeader("CompanyToken", "SEU_COMPANY_TOKEN_AQUI");
    request.AddHeader("content-type", "application/json");
    request.AddParameter("application/json", json, ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);

    Por questões internas, preciso utilizar HttpClient ao invés de RestClient. Fiz o seguinte código:

    var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add("cache-control", "no-cache"); httpClient.DefaultRequestHeaders.Add("ApplicationToken", ApplicationToken);

    httpClient.DefaultRequestHeaders.Add("CompanyToken", CompanyToken); httpClient.DefaultRequestHeaders.Add("content-type", "application/json"); var url = "https://sandbox.meuspedidos.com.br/api/v1/clientes"; HttpResponseMessage response = await httpClient.PostAsync(url, json);

    Porém, percebi que no método DefaultRequestHeaders, os Headers ficam todos misturados e a API não entende o que enviei causando erro. Qual a forma correta de fazer o esse post?



    sábado, 29 de dezembro de 2018 12:38

Respostas

  • Olá amigo Saulinho, tudo bem com você?..

    Vou colocar duas formas de fazer que eu utilizo, vc pode testar no seu projeto e vê se funciona ok.

    1 Opção : 

           

          private async  SeuMetodo()
            {
                var ApplicationToken = string.Empty;
                var CompanyToken = string.Empty;

                // coloque aqui seu objeto para converter para json
                string jsonObject = JsonConvert.SerializeObject(new Parametro { email = "valdir@valdir.com", senha = "1234" });


                string api = "https://integracao.meuspedidos.com.br/api/v1/clientes";

                using (HttpClient client = new HttpClient())
                {
                    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, api))
                    {

                        client.DefaultRequestHeaders.Clear();
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("ApplicationToken", ApplicationToken);
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("CompanyToken", CompanyToken);

                        client.Timeout = new TimeSpan(0, 0, 50000);

                        string dadoSerializado = JsonConvert.SerializeObject(jsonObject);
                        request.Content = new StringContent(dadoSerializado, Encoding.UTF8, "application/json");
                        request.Headers.Add("Cache-Control", "no-cache");


                        var response = client.SendAsync(request).Result;

                        if (response.IsSuccessStatusCode)
                        {
                            var ProdutoJsonString = await response.Content.ReadAsStringAsync();
                            // OU usar com Result
                            //    var ProdutoJsonString = await response.Content.ReadAsStringAsync().Result;

                            // no lugar de Clientes coloca seu objeto que será retornado
                            var listaRetorno = JsonConvert.DeserializeObject<Clientes[]>(ProdutoJsonString).ToList();
                        }


                    }

                }
    }

    2 Opção :

                       

           private async  SeuMetodo()
            {
                var ApplicationToken = string.Empty;
                var CompanyToken = string.Empty;

                // coloque aqui seu objeto para converter para json
                string jsonObject = JsonConvert.SerializeObject(new Parametro { email = "valdir@valdir.com", senha = "1234" });


                string api = "https://integracao.meuspedidos.com.br/api/v1/clientes";

                using (HttpClient client = new HttpClient())
                {
                    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, api))
                    {

                        client.DefaultRequestHeaders.Clear();

                        client.Timeout = new TimeSpan(0, 0, 50000);

                        string dadoSerializado = JsonConvert.SerializeObject(jsonObject);
                        request.Content = new StringContent(dadoSerializado, Encoding.UTF8, "application/json");
                        request.Headers.Add("ApplicationToken", ApplicationToken);
                        request.Headers.Add("Cache-Control", "no-cache");
                        request.Headers.Add("CompanyToken", CompanyToken);


                        var response = client.SendAsync(request).Result;

                        if (response.IsSuccessStatusCode)
                        {
                            var ProdutoJsonString = await response.Content.ReadAsStringAsync();
                            // OU usar com Result
                            //    var ProdutoJsonString = await response.Content.ReadAsStringAsync().Result;

                            // no lugar de Clientes coloca seu objeto que será retornado
                            var listaRetorno = JsonConvert.DeserializeObject<Clientes[]>(ProdutoJsonString).ToList();
                        }


                    }

                }
            }

    Acredito que  a segunda opção sejá mais eficaz pra você amigo.

    Caso ocorra algum problema não deixe de me avisar que eu lhe ajudo.

    Não esqueça de marcar como respondido pra dar aquela força...



    domingo, 30 de dezembro de 2018 04:00
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 18 de janeiro de 2019 18:46
    Moderador

Todas as Respostas

  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 18 de janeiro de 2019 18:46
    Moderador