Как добавить Expires к HttpHeader HttpClient в c #? - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь вызвать 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();
                        }                    
                }
            }

Кто-нибудь может указать на проблему в моем подходе?

...