Вызов API Shopware из C# с HttpClient

Я пытаюсь вызвать Shopware REST API из C#. В Shopware есть документация для вызова API с помощью curl, и в основном я могу преобразовать это в C# и HttpClient, но для некоторых опций я просто не знаю, какие заголовки установить:

Магазин находится за базовой htaccess-auth и имеет авторизацию Shopware, использующую apikey. Мой код до сих пор:

var handler = new System.Net.Http.HttpClientHandler { Credentials = new NetworkCredential(htaccessUsername, htaccessPassword) });
var client = new System.Net.Http.HttpClient(handler);

using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl + "orders?limit=20"))
{
  var encodedStr = Convert.ToBase64String(Encoding.Default.GetBytes($"{username}:{apiKey}"));
  var authorizationKey = "Basic" + " " + encodedStr;
  requestMessage.Headers.Add("Authorization", authorizationKey);
  // curl_setopt($this->cURL, CURLOPT_RETURNTRANSFER, true);
  // curl_setopt($this->cURL, CURLOPT_FOLLOWLOCATION, false);
  // curl_setopt($this->cURL, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
  // curl_setopt(
  //    $this->cURL,
  //    CURLOPT_HTTPHEADER,
  //    ['Content-Type: application/json; charset=utf-8']
  // );
  using (var responseMessage = await client.SendAsync(requestMessage))
  {
    var data = await responseMessage.Content.ReadAsStringAsync();
    System.Diagnostics.Trace.WriteLine(data);
  }
}

Базовая аутентификация htaccess работает, но аутентификация Shopware не работает со следующим ответом в данных:

"{\"success\":false,\"message\":\"Invalid or missing auth\"}"

Я думаю, мне нужно как-то добиться curl_setopt($this->cURL, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); в C#, но я не нашел понятия, как преобразовать эти параметры curl в заголовок. Любая помощь?

1 ответ

Решение

Похоже, ответ для вас здесь:

var credCache = new CredentialCache();
var basicCred = new NetworkCredential(htaccessUsername, htaccessPassword);
var digestCred = new NetworkCredential(username, apiKey);
credCache.Add(new Uri("http://.com/"), "Basic", basicCred);
credCache.Add(new Uri("http://.com/"), "Digest", digestCred);
var httpClient = new HttpClient(new HttpClientHandler { Credentials = credCache });
Другие вопросы по тегам