Хорошо, я часами бьюсь головой об этом, читаю документы и гуглюсь до чертиков. Я в тупике. Я довольно новичок в 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);
}
}
}
Чего мне не хватает?