c# windows-phone-7 windows-phone-8 dotnet-httpclient asynchttpclient

¿Cómo usar las credenciales en HttpClient en c#?



windows-phone-7 windows-phone-8 (3)

El código que está mostrando funciona para mí en comparación con un recurso autenticado. Sospecho que Delicious está haciendo algo raro.

Teniendo en cuenta que estás en Windows Phone, es un dolor depurar con Fiddler, por lo que lo que sugiero es obtener una cuenta de Runscope . Instale este controlador de mensaje que redirigirá su solicitud a través del depurador RunScope. Una vez que hagas esto, te sugiero que mires el encabezado www-authenticate y examines lo que está devolviendo.

Si todo lo demás falla, siempre puede establecer el encabezado Autenticación directamente con las credenciales de autenticación básicas. No necesita usar la clase de Credenciales.

Estoy enfrentando algunos problemas cuando uso la clase HttpClient para acceder a Delicious API. Tengo el siguiente código:

try { const string uriSources = "https://api.del.icio.us/v1/tags/bundles/all?private={myKey}"; using (var handler = new HttpClientHandler { Credentials = new NetworkCredential("MyUSER", "MyPASS") }) { using (var client = new HttpClient(handler)) { var result = await client.GetStringAsync(uriSources); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "ERROR...", MessageBoxButton.OK); }

Cuando ejecuto el código anterior, recibo lo siguiente: El código de estado de la respuesta no indica éxito: 401 (no autorizado).

Entonces, ¿cómo podría obtener este trabajo? ¿Es posible?

Gracias por adelantado

¡Saludos!


Esta es una publicación anterior, pero se pensó en agregar mi respuesta para alguien que enfrenta problemas similares y respuestas de navegación ...

Enfrenté un problema similar. En mi caso, funcionó la propiedad Dominio para NetworkCredentials. Puedes intentar configurar el dominio.


Yo mismo tuve exactamente el mismo problema. Parece que HttpClient simplemente ignora las credenciales establecidas en HttpClientHandler .

Sin embargo, lo siguiente funcionará:

using System.Net.Http.Headers; // For AuthenticationHeaderValue const string uri = "https://example.com/path?params=1"; using (var client = new HttpClient()) { var byteArray = Encoding.ASCII.GetBytes("MyUSER:MyPASS"); var header = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(byteArray)); client.DefaultRequestHeaders.Authorization = header; var result = await client.GetStringAsync(uri); }

No es necesario para el controlador.

Fuente: http://www.snip2code.com/Snippet/13895/Simple-C---NET-4-5-HTTPClient-Request-Us