Setting Authorization Header of HttpClient

前端 未结 21 2178
粉色の甜心
粉色の甜心 2020-11-22 14:53

I have an HttpClient that I am using for a REST API. However I am having trouble setting up the Authorization header. I need to set the header to the token I received from d

21条回答
  •  轮回少年
    2020-11-22 15:14

    BaseWebApi.cs

    public abstract class BaseWebApi
    {
        //Inject HttpClient from Ninject
        private readonly HttpClient _httpClient;
        public BaseWebApi(HttpClient httpclient)
        {
            _httpClient = httpClient;
        }
    
        public async Task PostAsync(string method, object param, Dictionary headers, HttpMethod httpMethod)
        {
            //Set url
    
            HttpResponseMessage response;
            using (var request = new HttpRequestMessage(httpMethod, url))
            {
                AddBody(param, request);
                AddHeaders(request, headers);
                response = await _httpClient.SendAsync(request, cancellationToken);
            }
    
            if(response.IsSuccessStatusCode)
            {
                 return await response.Content.ReadAsAsync();
            }
            //Exception handling
        }
    
        private void AddHeaders(HttpRequestMessage request, Dictionary headers)
        {
            request.Headers.Accept.Clear();
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
            if (headers == null) return;
    
            foreach (var header in headers)
            {
                request.Headers.Add(header.Key, header.Value);
            }
        }
    
        private static void AddBody(object param, HttpRequestMessage request)
        {
            if (param != null)
            {
                var content = JsonConvert.SerializeObject(param);
                request.Content = new StringContent(content);
                request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            }
        }
    

    SubWebApi.cs

    public sealed class SubWebApi : BaseWebApi
    {
        public SubWebApi(HttpClient httpClient) : base(httpClient) {}
    
        public async Task GetStuffAsync(int cvr)
        {
            var method = "get/stuff";
            var request = new StuffRequest 
            {
                query = "GiveMeStuff"
            }
            return await PostAsync(method, request, GetHeaders(), HttpMethod.Post);
        }
        private Dictionary GetHeaders()
        {
            var headers = new Dictionary();
            var basicAuth = GetBasicAuth();
            headers.Add("Authorization", basicAuth);
            return headers;
        }
    
        private string GetBasicAuth()
        {
            var byteArray = Encoding.ASCII.GetBytes($"{SystemSettings.Username}:{SystemSettings.Password}");
            var authString = Convert.ToBase64String(byteArray);
            return $"Basic {authString}";
        }
    }
    

提交回复
热议问题