Я пытаюсь вызвать API из внешнего приложения из моего кода C #. (.Net core 2.2) Я использую HttpClient
для этого. Хотя я пытался добавить Expires
в заголовок, он удаляется из запроса во время его вызова (я проверял через Fiddler). Я добавляю токен аутентификации аналогичным образом, и он корректно добавляется в заголовки.
Я получаю 401
ошибку от API.
Вот мой код:
HttpClient client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Get, requestUri.Uri);
var xml = new MediaTypeWithQualityHeaderValue("application/xml");
var json = new MediaTypeWithQualityHeaderValue("application/json", 0.8);
req.Headers.Accept.Clear();
req.Headers.Accept.Add(json);
// First try
//req.Headers.TryAddWithoutValidation("Authorization", "H** ********:MApmTuFFV5nZJOg+i5gRBPkM**0=");
//req.Headers.TryAddWithoutValidation("Expires", "10/02/19 10:36:33 AM UTC");
// Second try
//client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "H** ********:MApmTuFFV5nZJ**+i5gRBPkM**0=");
//client.DefaultRequestHeaders.TryAddWithoutValidation("Expires", "10/02/19 10:36:33 AM UTC");
// Third try
//req.Headers.Authorization = new AuthenticationHeaderValue("Authorization", "H** ********:MApmTuFFV5nZJOg+i5gRBPkM**0=");
// req.Headers.Add("Expires", "10/02/19 10:36:33 AM UTC");
try
{
using (HttpResponseMessage res = await client.SendAsync(req))
{
response.ResponseStatusCode = res.StatusCode;
response.ResponseStatusDescription = string.Format("HttpStatusCode: {0} \n StatusDescription: {1}", res.StatusCode.ToString(), res.StatusCode);
using (var reader = new StreamReader(await res.Content.ReadAsStreamAsync()))
{
response.ResponseContent = reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
}
Вызов API был выполнен с использованием HttpWebRequest
, и то же самое хорошо работает, когда я изменил его на HttpClient
, я получаю 401 UnAuthorized
как ответ от API: предыдущий код:
string uri = "http://someservice.com"
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "Get";
req.Accept = "application/json";
req.KeepAlive = true;
req.Headers[HttpRequestHeader.Expires] = "10/02/19 10:36:33 AM UTC";
req.Headers[HttpRequestHeader.Authorization] = "H** ********:MApmTuFFV5nZJ**+i5gRBPkM**0=";
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
response.ResponseStatusCode = res.StatusCode;
response.ResponseStatusDescription = string.Format("HttpStatusCode: {0} \n StatusDescription: {1}", res.StatusCode.ToString(), res.StatusDescription);
using (var reader = new StreamReader(res.GetResponseStream()))
{
response.ResponseContent = reader.ReadToEnd();
}
}
}
Кто-нибудь может указать на проблему в моем подходе?