IHttpClientFactory调用接口

  public class Monitor
    {       
        /// <summary>
        /// POST请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="obj"></param>
        /// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param>
        /// <param name="charset"></param>
        /// <returns></returns>        
        public string HttpPostAsync(string url, object obj, string contentType = "", string charset = "UTF-8")
        {
            string result = "";

            var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
            IHttpClientFactory _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
            var _httpClient = _httpClientFactory.CreateClient("CTCCMonitor");

            _httpClient.DefaultRequestHeaders.Accept.Clear();
            _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));

           
            string content = JsonConvert.SerializeObject(obj);

            var httpContent = new StringContent(content, Encoding.UTF8, contentType);

            var response = _httpClient.PostAsync(url, httpContent).Result;
            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                if (t != null)
                {
                    result = t.Result;
                }
            }
            return result;
        }

        /// <summary>
        /// GET请求
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public string HttpGetAsync(string url)
        {
            string result = "";
            var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
            IHttpClientFactory _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();

            var _httpClient = _httpClientFactory.CreateClient("CTCCMonitor");

            var response = _httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                Task<string> t = response.Content.ReadAsStringAsync();
                if (t != null)
                {
                    result = t.Result;
                }
            }
            return result;
        }

        /// <summary>
        /// 拼接请求参数
        /// </summary>
        /// <param name="method">请求方式GET/POST</param>
        /// <param name="dic"></param>
        /// <returns></returns>
        public string GetPara(string method, Dictionary<string, string> dic)
        {
            StringBuilder strPara = new StringBuilder();
            method = method.ToUpper();
            switch (method)
            {
                case "POST":
                    foreach (var item in dic)
                    {
                        if (!string.IsNullOrEmpty(strPara.ToString()))
                        {
                            strPara.Append("&");
                        }

                        strPara.Append(item.Key).Append("=").Append(item.Value);
                    }
                    break;
                case "GET":
                    foreach (var item in dic)
                    {
                        if (string.IsNullOrEmpty(strPara.ToString()))
                        {
                            strPara.Append("?");
                        }
                        else
                        {
                            strPara.Append("&");
                        }
                        strPara.Append(item.Key).Append("=").Append(item.Value);
                    }
                    break;
            }
            return strPara.ToString();
        }
    }

string url ="";//请求地址

Monitor monitor = new Monitor();
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("method", method);
dic.Add("user_id", user_id);
dic.Add("passWord", passwordEnc);
dic.Add("sign", sign);

//Get请求

string requestUrl = url + monitor.GetPara("get", dic);
apiResult = monitor.HttpGetAsync(requestUrl);

//Post请求

string postData =monitor.GetPara("post", dic);
apiResult = monitor.HttpPostAsync(url, postData, "application/x-www-form-urlencoded");

posted @ 2020-01-13 10:25  tommy~hi  阅读(1492)  评论(0编辑  收藏  举报