Передача заголовка авторизации в нескольких перенаправлениях HttpClient - PullRequest
0 голосов
/ 24 октября 2018

Я отправляю запрос на получение на сервер, сервер перенаправляет на 4 дальнейших вызова, а затем возвращает ответ.HttpClient дает исключение, токен авторизации не предоставляется.

Подскажите, как передать один и тот же токен авторизации на несколько перенаправлений?Это работает нормально, если я установил «AllowAutoRedirect = false» и вернул статус RanToComplation.Вот мой метод:

static async Task CallWebAPIAsync()
        {

            WebRequestHandler webRequestHandler = new WebRequestHandler();
            webRequestHandler.UseDefaultCredentials = true;
             webRequestHandler.AllowPipelining = true;
            webRequestHandler.AllowAutoRedirect = true;

            using (var client = new HttpClient(webRequestHandler))
            {
                client.BaseAddress = new Uri("https://apirequest");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token);
                client.Timeout = TimeSpan.FromSeconds(30000);
                //GET Method  
                var response = await client.GetAsync("user").ConfigureAwait(false); 
                if (response.IsSuccessStatusCode)
                {
                    var responseresult = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Id:{0}\tName:{1}", responseresult);
                }
                else
                {
                    Console.WriteLine("Internal server Error");
                }

            }

1 Ответ

0 голосов
/ 24 октября 2018

Мне не хватало обработчика делегирования, который будет обрабатывать перенаправления.https://stackoverflow.com/a/19493338/3459965 эта ссылка мне помогает

Обновленный код:

 static async Task CallWebAPIAsync()
    {
        HttpClientHandler clientHandler = new HttpClientHandler();
        WebRequestHandler webRequestHandler = new WebRequestHandler();
        webRequestHandler.UseDefaultCredentials = true;
         webRequestHandler.AllowPipelining = true;
        webRequestHandler.AllowAutoRedirect = false;
        webRequestHandler.Credentials = CredentialCache.DefaultCredentials;


        GlobalRedirectHandler globalRedirectHandler = new GlobalRedirectHandler() { InnerHandler = webRequestHandler };


        using (var client = new HttpClient(globalRedirectHandler))
        {
            client.BaseAddress = new Uri("https://apitest");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token);


            client.Timeout = TimeSpan.FromSeconds(30000);
            //GET Method  
            var response = await client.GetAsync("user").ConfigureAwait(false); 
            if (response.IsSuccessStatusCode)
            {
                var responseresult = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Id:{0}\tName:{1}", responseresult);
            }
            else
            {
                Console.WriteLine("Internal server Error");
            }

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