Как ждать код состояния 200 при использовании класса HttpClient из приложения .Net 4.0, вызывает другое .Net core api, обе аутентификации Windows включены - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 2 приложения, оба с аутентификацией Windows включены и будут на одном сервере. Один - клиентское приложение (сделано в .net 4.0), а другой - API (сделано в .net core 2.0).Мне нужно вызывать Api из клиентского приложения со стороны сервера (не может сделать из ajax из-за некоторых неизбежных ограничений от дизайна API).

Для этого я использую HttpClient (System.Net.Http v2.0) , код такой:

public static IEnumerable<TResponse> InvokeGetWithQueryParam<TResponse>(string apiBaseUrl, string getRelativeUrl, Dictionary<string, string> queryParamList)
        {
            var url = GetUriBuilderInstance(apiBaseUrl, getRelativeUrl, queryParamList);
            var httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true };

            HttpClient client = new HttpClient(httpClientHandler);
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            List<TResponse> responseObj = null;
            try
            {
                //this gives 3 codes 401 twice and 200 at last, i only want next if to execute/process response and give data back when only for 200
                var response = **client.GetAsync**(url, HttpCompletionOption.ResponseHeadersRead).Result;

                if (response.IsSuccessStatusCode)
                {
                    responseObj = response.Content.ReadAsAsync<List<TResponse>>().Result;
                }
            }
            catch (Exception exp)
            {
                //do logging later
                throw;
            }

            return responseObj;
        }

Когда я его запускаю, я получаю 3 различных кода ошибки в скрипаче , как можно увидеть здесь.

enter image description here

Мой вопрос

Как я могу гарантировать, что этот метод возвращает данные только тогда, когда код ответа равен 200?

Любая идея будет полезна.

Примечание: Я не могу использовать async await в любом случае, так как это не .net 4.5, поэтому, пожалуйста, избегайте предложений относительно версий .net 4.5 или более.

...