【问题标题】:Passing Authorization Header in multiple redirects of HttpClient在 HttpClient 的多个重定向中传递授权标头
【发布时间】:2018-10-24 12:10:29
【问题描述】:

我正在向服务器发送一个 get 请求,服务器正在重定向到 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");
                }

            }

【问题讨论】:

    标签: c# httpclient system.net.httpwebrequest .net-4.7


    【解决方案1】:

    我认为问题可能与this有关

    必须在重定向时去除授权标头。我目前正在尝试弄清楚如何解决它。

    【讨论】:

      【解决方案2】:

      我错过了将处理重定向的委托处理程序。 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");
                  }
      
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多