4
respostas

Consumir Web Service com autenticação - C#

Olá Pessoal,

Estou tentando consumir um web service que necessita de de Basic Authentication. No caso é uma requisição de tipo post onde eu envio um Json e o Web Service também devolve um Json. Para testes eu usei o programa Postman, onde eu testei o link, as chaves de autenticação e o Json de envio e o Postman fez o retorno normal, porém quando vou fazer no código c# eu não consigo nenhum retorno.

O código que estou utilizando atualmente é este:

var uri = new Uri("https://meulink");

                        HttpClient cliente = new HttpClient();

                        var authData = string.Format("{0}:{1}", "usuario", "senha");

                        var authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));

                        cliente.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);

                        var json = JsonConvert.SerializeObject(client, Formatting.Indented);

                        HttpContent content = new StringContent(json, Encoding.UTF8, "text/json");

                        HttpResponseMessage response = await cliente.PostAsync(uri, content);

Desde já agradeço a quem puder ajudar.

4 respostas

Olá, Wesley

Vamos investigar o resultado desse objeto response? Adicione estas linhas ao final do seu código e acompanhe o resultado:

HttpContent content = response.Content;
Console.WriteLine("Response StatusCode: " + (int)response.StatusCode);
string result = await content.ReadAsStringAsync();
if (result != null)
{
    Console.WriteLine(result);
}

Olá Marcelo, obrigado por responder.

Eu fiz como você pediu e coloquei as linhas no final do meu código, ficou assim:

 try
                    {

                        Uri uri = new Uri("https://sandbox.moip.com.br/v2/customers/");

                        HttpClient cliente = new HttpClient();

                        var authData = string.Format("{0}:{1}", "usuario", "senha");
                        var authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));


                        cliente.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);


                        var json = JsonConvert.SerializeObject(client, Formatting.Indented);

                        HttpContent content = new StringContent(json, Encoding.UTF8, "text/json");

                        HttpResponseMessage response = await cliente.PostAsync(uri, content);

                        HttpContent contente = response.Content;

                        Console.WriteLine("Response StatusCode: " + (int)response.StatusCode);

                        string result = await contente.ReadAsStringAsync();

                        if (result != null)
                        {
                            Console.WriteLine(result);
                        }

                    }
                    catch(Exception e)
                    {
                        throw new Exception("falha", e);
                    }

No caso eu coloquei um BreakPoint no começo do bloco Try/Catch, rodei linha a linha e ele para na linha :

HttpResponseMessage response = await cliente.PostAsync(uri, content);

e vai direto para o catch e o "response" fica como null.

Oi, Wesley

Se ele vai para o catch, então um erro foi detectado. Você pode copiar e colar aqui o texto (completo) da exceção que está sendo capturada? Assim podemos investigar melhor.

Olá Marcelo, deixei o código seguir atá disparar a exceção, no caso ele disparou:

An unhandled exception occured.

Apenas isso.

Não sei se tem alguma coisa a ver, mas este método esta sendo chamado dentro de um aplicativo Xamarin. O que estou tentando fazer é enviar dados de um "usuario" para um serviço de pagamento chamado MOIP, no qual eles disponibilizam um link para envio destes dados e chaves de autenticação. No momento essas chaves estão apenas em ambiente de teste, não tendo qualquer efeito sobre pagamentos reais.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software