Httpclient возвращает пустые ключи API и ключи клиента - PullRequest
1 голос
/ 15 апреля 2020

Хорошо, вторая пара глаз по какой-то причине моя собственность всегда возвращается в ноль.

Эти ключи, описанные здесь, предназначены только для демонстрационных покупок и не будут работать по-другому.

public class RoundTableAPIClient {
    public string ApiKey { get; set; }
    public string ClientSecret { get; set; }
}

Это класс, в котором все мои вызовы API хранятся в

private readonly HttpClient _httpClient;    
public RoundTableAPIClient() {
     _httpClient = new HttpClient();
    if (ApiKey != null | ClientSecret != null)  {
            _httpClient.DefaultRequestHeaders.Add(Constants.ApiKey, ApiKey);
            _httpClient.DefaultRequestHeaders.Add(Constants.ClientSecret, ClientSecret);
    }
}

Значения ApiKey и Client secret в моем контроллере запаса равны нулю. Я передаю их в

public class StockController : Controller    {
    private readonly IStringLocalizer<StockController> _localizer;
    RoundTableAPIClient apiClient;
    public StockController(IStringLocalizer<StockController> localizer)   {
        _localizer = localizer;
        apiClient = new RoundTableAPIClient();
    }

Это мой пример получения, когда я иду в API для получения данных, которые эта функция содержит в моем контроллере запаса.

  public async Task<object> Get(DataSourceLoadOptions loadOptions) {
        List<Stock> _result = new List<Stock>();
        apiClient.DeveiceType = device.Desktop;
        apiClient.DeveiceType = device.Desktop;
        apiClient.ApiKey = "B538F53B-37F7-4564-B7C5-56AFF399252B";
        apiClient.ClientSecret = "8132ED0B-8F0B-4841-8BF4-CE8438AC0F3E";        
        _result =  await apiClient.GetStockFromApi();
        return DataSourceLoader.Load(_result, loadOptions);
    }

public async Task<List<Stock>> GetStockFromApi() {
   List<Stock> _result = new List<Stock>();
   var uri = new Uri(string.Format(ApiUrl + Constants.GetALlStock, string.Empty));
   var response = await _httpClient.GetAsync(uri);

    if (response.IsSuccessStatusCode) {
            var byteArray = await response.Content.ReadAsByteArrayAsync();
            var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
            _result = JsonConvert.DeserializeObject<List<Stock>>(content);
    }
        return _result.ToList();
}

Здесь, когда я проверяю своего http-клиента, заголовки по умолчанию все еще являются банковскими Я не понимаю, почему это так.

Редактировать 2

Должен ли я делать это больше так?

public async Task<List<Stock>> GetStockFromApi(string ApiKey,string ClientSecret) {
   List<Stock> _result = new List<Stock>();
   var uri = new Uri(string.Format(ApiUrl + Constants.GetALlStock, string.Empty));

        var response = await _httpClient.GetAsync(uri);
        if (ApiKey != null | ClientSecret != null) {
            _httpClient.DefaultRequestHeaders.Add(Constants.ApiKey, ApiKey);
            _httpClient.DefaultRequestHeaders.Add(Constants.ClientSecret, ClientSecret);
        }

        if (response.IsSuccessStatusCode)
        {
            var byteArray = await response.Content.ReadAsByteArrayAsync();

            var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
            _result = JsonConvert.DeserializeObject<List<Stock>>(content);
        }

        return _result.ToList();
    }

1 Ответ

0 голосов
/ 16 апреля 2020

Вы добавляете заголовки в конструктор при условии, что ApiKey или ClientSecret не являются нулевыми, но они всегда будут нулевыми на этом этапе. Возможно, вы захотите задать эти значения по умолчанию или добавить их в качестве параметров в конструкторе.

...