Как использовать учетные данные в 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.