Ошибка 415 при выполнении HttpClient.GetAsync - PullRequest
0 голосов
/ 28 марта 2020

Хорошо, я часами бьюсь головой об этом, читаю документы и гуглюсь до чертиков. Я в тупике. Я довольно новичок в ASP. Net Core / C# и пытаюсь сделать довольно простой HTTP-вызов Get для удаленной службы из объекта в моем веб-приложении. Служба требует, чтобы я установил заголовок «APIKey» для проверки подлинности на их серверах, но в остальном он довольно ванильный и возвращает обобщенную коллекцию c JSON. Вместо того, чтобы получить JSON, я получаю статус ошибки с фразой причины "Unsupported Media Type" и кодом состояния "415". Я могу запросить службу без проблем в Почтальоне.

RequestMessage в ответе:

{Method: GET, RequestUri: 'url_removed_for_stack', Version: 2.0, Content: <null>, Headers:
{
  Accept: application/json
  Accept-Encoding: gzip
  Accept-Encoding: deflate
  Accept-Encoding: gzip
  Accept-Encoding: deflate
  APIKey: apikey_removed_for_stack
}}

Метод вызова, в целом:

 private async Task<JsonValue> GetAsync(string uri, string apiKey, int timeout)
        {
            var handler = new HttpClientHandler()
            {
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            };

            using (var client = new HttpClient(handler))
            {
                //remove the default header
                client.DefaultRequestHeaders.Clear();
                client.Timeout = TimeSpan.FromMilliseconds(timeout);

                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
                client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
                client.DefaultRequestHeaders.Add("APIKey", apiKey);

                try
                {
                    var response = await client.GetAsync(uri);
                    if (!response.IsSuccessStatusCode)
                    {
                        isError = true;
                        errorMessage = "GetAsync Response Error: " + response.ReasonPhrase;
                        return await Task.FromResult(0);
                    }

                    var content = await response.Content.ReadAsStringAsync();
                    return await Task.Run(() => JsonValue.Parse(content));
                }
                catch (Exception ex)
                {
                    isError = true;
                    errorMessage = ex.ToString();
                    return await Task.FromResult(0);
                }
            }           
        }

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...