HttpClient.cs 4.7 KB
using log4net;
using RestSharp;
using System.Collections.Generic;
using System.Reflection;

namespace Common.Communication
{
    public class HttpClient
    {
        static readonly LogBean log = new LogBean(MethodBase.GetCurrentMethod()?.DeclaringType.FullName);
        public Dictionary<string, string> Headers = new Dictionary<string, string>();
        public string BaseUrl { get; private set; }
        RestClient client;
        public HttpClient(string baseUrl, int httpTimeout = 10000)
        {
            BaseUrl = baseUrl;
            client = new RestClient(new RestClientOptions(baseUrl)
            {
                ThrowOnAnyError = true,
                Timeout = httpTimeout,
                Encoding = System.Text.Encoding.UTF8
            });
        }
        public string Get(string resource = "", Dictionary<string, string> query = null)
        {
            var response = GetResponse(resource, query);
            string s = response.Content ?? "";
            LogUtil.Debug($"HttpGet URL:【{BaseUrl}{resource}】Return:【{response.StatusCode}】【{s}】", log);
            return s;
        }
        public RestResponse GetResponse(string resource = "", Dictionary<string, string> query = null)
        {
            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            if (query != null)
            {
                foreach (var kv in query)
                    request.AddQueryParameter(kv.Key, kv.Value);
            }
            return client.GetAsync(request).GetAwaiter().GetResult();
        }

        public string Post(string body, string resource = "")
        {
            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            request.AddStringBody(body, DataFormat.Json);
            var response = client.PostAsync(request).GetAwaiter().GetResult();
            string s = response.Content ?? "";
            LogUtil.Debug($"HttpPost URL:【{BaseUrl}{resource}】【{body}】Return:【{response.StatusCode}】【{s}】", log);
            return s;
        }
        public string Post(object body, string resource = "")
        {
            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            request.AddJsonBody(body);
            var response = client.PostAsync(request).GetAwaiter().GetResult();
            string s = response.Content ?? "";
            LogUtil.Debug($"HttpPost URL:【{BaseUrl}{resource}】【{JsonHelper.SerializeObject(body)}】Return:【{response.StatusCode}】【{s}】", log);
            return s;
        }

        public string Put(string resource, string body)
        {

            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            request.AddStringBody(body, DataFormat.Json);
            var response = client.PutAsync(request).GetAwaiter().GetResult();

            string s = response.Content ?? "";
            LogUtil.Debug($"HttpPut URL:【{BaseUrl}{resource}】【{body}】Return:【{response.StatusCode}】【{s}】", log);
            return s;
        }
        public string Put(string resource)
        {

            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            var response = client.PutAsync(request).GetAwaiter().GetResult();

            string s = response.Content ?? "";
            LogUtil.Debug($"HttpPut URL:【{BaseUrl}{resource}】Return:【{response.StatusCode}】【{s}】", log);
            return s;
        }

        //public string Delete(string resource)
        //{
        //    var request = new RestRequest() { Resource = resource };
        //    AddHeaders(request, Headers);
        //    var response =  client.DeleteAsync(request).GetAwaiter().GetResult();
        //    string s = response.Content ?? "";
        //    LogUtil.Debug($"HttpDelete URL:【{BaseUrl}{resource}】Return:【{response.StatusCode}】【{s}】", log);
        //    return s;
        //}
        public System.Net.HttpStatusCode Delete(string resource)
        {
            var request = new RestRequest() { Resource = resource };
            AddHeaders(request, Headers);
            var response = client.DeleteAsync(request).GetAwaiter().GetResult();
            LogUtil.Debug($"HttpDelete URL:【{BaseUrl}{resource}】Return:【{response.StatusCode}】", log);
            return response.StatusCode;
        }
        void AddHeaders(RestRequest restRequest, Dictionary<string, string> headers)
        {
            if (headers != null && headers.Count > 0)
            {
                restRequest.AddOrUpdateHeaders(headers);
            }
        }
    }
}