C# System. Net .Http Не распознает определения - PullRequest
0 голосов
/ 05 мая 2020

(я использую Visual Studio 2015)

Я скопировал эту функцию из другого проекта VS (он отлично работает). Я заметил, что получаю ошибки на tokenClient.SetBasicAuthentication().

Затем я понял из рабочего кода, что это ссылка на System.Net.Http.

Итак, я добавил ссылку через Add -> References.

Я все еще получал ошибку. Поэтому я пошел искать пакет Nuget и установленную систему. Net .Http v4.3.4 (от Microsoft).

Я все еще получаю эту ошибку. (см. изображение - я тоже включил код).

Кто-нибудь может помочь? Почему я не могу заставить SetBasicAuthentication работать?

enter image description here

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Authentication;
using System.Threading.Tasks;
using System.Web;

// other code ......
// other code ......

public static async Task<string> querySite(string url)
{
    var tokenClient = new HttpClient();
    var postData = new FormUrlEncodedContent(new Dictionary<string, string>() { { "grant_type", "client_credentials" }, { "scope", "site_integration_api" } });

    //Create TLS Security Protocol
    ServicePointManager.SecurityProtocol = Tls12;
    tokenClient.SetBasicAuthentication(clientID, clientSecret);

    var tokenResponse = await tokenClient.PostAsync(loginUrl, postData);
    if (!tokenResponse.IsSuccessStatusCode)
        throw new ApplicationException("Could not accept token. Ensure credentials are correct.");

    string tokenData = await tokenResponse.Content.ReadAsStringAsync();

    int start = tokenData.IndexOf(access_token_string) + access_token_string.Length + 1;
    int end = tokenData.IndexOf("\"", start + 1) - start;
    var accessToken = tokenData.Substring(start, end);

    //Call service to get XML
    var serviceClient = new HttpClient();
    serviceClient.SetBearerToken(accessToken);

    return await serviceClient.GetStringAsync(url);        
}

1 Ответ

2 голосов
/ 05 мая 2020

Вы можете создать свой собственный метод расширения для базовой c аутентификации:

public static class HttpClientExtention
{
    public static void SetBasicAuthentication(this HttpClient client, string userName, string password)
    {
        client.DefaultRequestHeaders.Authorization =
            new AuthenticationHeaderValue("Basic",
                Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{userName}:{password}")));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...