Как использовать учетные данные в HttpClient в С#?
Я сталкиваюсь с некоторыми проблемами при использовании класса HttpClient для доступа к Delicious API. У меня есть следующий код:
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);
}
При запуске кода выше я получаю следующее: Код состояния ответа не указывает на успех: 401 (Несанкционированный).
Итак, как я мог получить эту работу? Возможно ли это?
Заранее спасибо
Привет!
Ответы
Ответ 1
У меня была одна и та же проблема. Кажется, что HttpClient
просто игнорирует учетные данные, установленные в HttpClientHandler
.
Далее будут работать следующие:
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);
}
Нет необходимости в обработчике.
Источник: http://www.snip2code.com/Snippet/13895/Simple-C---NET-4-5-HTTPClient-Request-Us
Ответ 2
Это старый пост, но я думал добавить свой ответ для кого-то, столкнувшегося с подобной проблемой и просмотра ответов...
Я столкнулся с подобной проблемой. В моем случае работа над настройкой свойства Domain для NetworkCredentials работала. Вы можете попробовать установить Домен.
Ответ 3
Код, который вы показываете, работает для меня против аутентифицированного ресурса. Я подозреваю, что Delicious делает что-то странное.
Учитывая, что вы находитесь на Windows Phone, больно отлаживать Fiddler, поэтому я предлагаю получить Runscope. Установите этот обработчик сообщений, который перенаправит ваш запрос через отладчик RunScope. Как только вы это сделаете, я предлагаю вам посмотреть заголовок www-authenticate и проверить, что это значит.
Если все остальное не удается, вы всегда можете напрямую настроить заголовок аутентификации с помощью основных учетных данных. Вам не нужно использовать класс Credentials.