HttpwebClient的四種請求方式


   最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。

   十年河東十年河西,莫欺少年窮。 

    本文旨在發布代碼,供自己參考,也供大家參考,謝謝。

    正題:

    HttpWebClient的四種請求方式:Get、Post、Put、Delete

    系列代碼如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel;
using System.Web;

namespace WebApiTest
{
    /// <summary>
    /// 系列代碼整理:陳卧龍 18137070152 QQ 1429677330
    /// </summary>
    public class RestServiceProxy
    {
        #region static List<T> Get<T>(string endpoint)類型請求
        /// <summary>
        /// HttpClientGet請求
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="endpoint">URL</param>
        /// <returns></returns>
        public static List<T> Get<T>(string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);//帶上請求標題頭 
                var response = httpClient.GetAsync(endpoint).Result;
                return JsonConvert.DeserializeObject<List<T>>(response.Content.ReadAsStringAsync().Result);
            }
        }
        #endregion

        #region static T Get<T>(int id, string endpoint)類型請求
        public static T Get<T>(int id, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
                //httpClient.DefaultRequestHeaders.Add("marketcode", GlobalClientConfig.MarketCode);//新宇多帶的標題頭
                //httpClient.DefaultRequestHeaders.Add("languagecode", GlobalClientConfig.LanguageResource);
                var response = httpClient.GetAsync(endpoint + id).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                return JsonConvert.DeserializeObject<T>(response.Content.ReadAsStringAsync().Result);
            }
        }
        public static T Get<T>(string id, string endpoint)
        {
            T obj;
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var response = httpClient.GetAsync(endpoint + id).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                obj = JsonConvert.DeserializeObject<T>(result);
                return obj;
            }
        }
        #endregion

        #region Get請求、傳遞一個對象,返回對象或對象集static T1 Get<T1, T2>(T2 data, string endpoint)
        /// <summary>
        /// general get restful service data 
        /// </summary>
        /// <typeparam name="T1">return data type 返回值類型</typeparam>
        /// <typeparam name="T2">input data type 參數類型</typeparam>
        /// <param name="data">search condition</param>
        /// <param name="endpoint">service url 請求URI</param>
        /// <returns></returns>
        public static T1 Get<T1, T2>(T2 data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
              
                var _endpoint = endpoint;

                var requestMessage = GetObjectPropertyValue(data);
                if (!string.IsNullOrEmpty(requestMessage))
                {
                    _endpoint += "?" + requestMessage.Remove(0, 1);
                }
                var response = httpClient.GetAsync(_endpoint).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonHelper.JsonDeserialize<T1>(result);
            }
        }

        public static List<T1> GetList<T1, T2>(T2 data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
              
                var _endpoint = endpoint;
                var requestMessage = GetObjectPropertyValue(data);
                if (!string.IsNullOrEmpty(requestMessage))
                {
                    _endpoint += "?" + requestMessage.Remove(0, 1);
                }
                var response = httpClient.GetAsync(_endpoint).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }
                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<List<T1>>(result);
            }
        }
        #endregion

        #region Get請求 不/傳遞Id 返回對象集合
        public static List<T1> GetList<T1>(string id, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
              
                var response = httpClient.GetAsync(endpoint + id).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<List<T1>>(result);
            }
        }

        public static List<T1> GetList<T1>(string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var response = httpClient.GetAsync(endpoint).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<List<T1>>(result);
            }
        }
        #endregion

        #region Post請求 static string Post<T>(T data, string endpoint)及 static TRetrun Post<TRetrun, TPost>(TPost data, string endpoint)
        public static string Post<T>(T data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
             
                var requestMessage = JsonHelper.JsonSerializer<T>(data);
                HttpContent contentPost = new StringContent(requestMessage, Encoding.UTF8, "application/json");
                var response = httpClient.PostAsync(endpoint, contentPost).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<string>(result);

            }
        }

        public static TRetrun Post<TRetrun, TPost>(TPost data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var requestMessage = JsonConvert.SerializeObject(data, new IsoDateTimeConverter());
                HttpContent contentPost = new StringContent(requestMessage, Encoding.UTF8, "application/json");
                var response = httpClient.PostAsync(endpoint, contentPost).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<TRetrun>(result);
            }
        }
        #endregion

        #region PostByDictionay 字典處理POST
        public static Dictionary<string, object> PostByDictionay<T>(T data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var requestMessage = JsonHelper.JsonSerializer<T>(data);
                HttpContent contentPost = new StringContent(requestMessage, Encoding.UTF8, "application/json");
                var response = httpClient.PostAsync(endpoint, contentPost).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
            }
        }
       
        /// <summary>
        /// 注冊設備MAC同步服務器,無需驗證
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <param name="endpoint"></param>
        /// <returns></returns>
        public static string PostDevice<T>(T data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var requestMessage = JsonHelper.JsonSerializer<T>(data);
                HttpContent contentPost = new StringContent(requestMessage, Encoding.UTF8, "application/json");
                var response = httpClient.PostAsync(endpoint, contentPost).Result;
                string result = response.Content.ReadAsStringAsync().Result;
                return JsonConvert.DeserializeObject<string>(result);
            }
        }
        #endregion

        #region 其他i請求
        public static string GetObjectPropertyValue<T>(T t)
        {
            StringBuilder sb = new StringBuilder();
            Type type = typeof(T);
            PropertyInfo[] properties = type.GetProperties();
            foreach (PropertyInfo property in properties)
            {
                if (property != null && t != null)
                {
                    object o = property.GetValue(t, null);
                    if (o != null)
                    {
                        sb.Append("&" + property.Name + "=" + o); ;
                    }
                }
            }
            return sb.ToString();
        }

        public static T GetOne<T>(string endpoint)
        {
            T obj;
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);

                var response = httpClient.GetAsync(endpoint).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                obj = JsonConvert.DeserializeObject<T>(result);
                return obj;
            }
        }

        public static T CheckWhetherInternet<T>(string endpoint)
        {
            T obj;
            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);

                var response = httpClient.GetAsync(endpoint).Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        throw new Exception("Invoke Server Service Error");
                    }
                }

                string result = response.Content.ReadAsStringAsync().Result;
                obj = JsonConvert.DeserializeObject<T>(result);
                return obj;
            }
        }
        #endregion

        #region Delete 請求
        public static string Delete<T>(T data, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("mac", GlobalClientConfig.MacAddress);
               
                var _endpoint = endpoint;
                var requestMessage = GetObjectPropertyValue(data);
                if (!string.IsNullOrEmpty(requestMessage))
                {
                    _endpoint += "?" + requestMessage.Remove(0, 1);
                }
                var result = httpClient.DeleteAsync(_endpoint).Result;
                //return result.Content.ReadAsStringAsync().Result;


                string res = result.Content.ReadAsStringAsync().Result;
                return res;
            }
        }

        public static string Delete(string id, string endpoint)
        {
            using (var httpClient = NewHttpClient())
            {
                var result = httpClient.DeleteAsync(endpoint + id).Result;

                return result.Content.ReadAsStringAsync().Result;
            }
        }
        #endregion

        #region 初始化HttpClient
        protected static HttpClient NewHttpClient()
        {
          
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
            return new HttpClient(handler);

        }
        #endregion

        #region 發起Json數據包請求
        /// <summary>
        /// 請求格式JSON數據格式
        /// </summary>
        /// <param name="posturl"></param>
        /// <param name="postData"></param>
        /// <returns></returns>
        public static string GetUri(string posturl, string postData)
        {

            using (var http = new HttpClient())
            {
                var content = new StringContent(postData, Encoding.UTF8, "application/json");
                //await異步等待回應
                var response = http.PostAsync(posturl, content).Result;

            }
            return null;
        }
        #endregion

        #region 這是HttpWebRequest請求方式
        public static string GetPage(string posturl, string postData)
        {
            //WX_SendNews news = new WX_SendNews(); 
            //posturl: news.Posturl;
            //postData:news.PostData;
            System.IO.Stream outstream = null;
            Stream instream = null;
            StreamReader sr = null;
            HttpWebResponse response = null;
            HttpWebRequest request = null;
            Encoding encoding = Encoding.UTF8;
            byte[] data = encoding.GetBytes(postData);
            // 准備請求...  
            try
            {
                // 設置參數  
                request = WebRequest.Create(posturl) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                outstream = request.GetRequestStream();
                outstream.Write(data, 0, data.Length);
                outstream.Close();
                //發送請求並獲取相應回應數據  
                response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才開始向目標網頁發送Post請求  
                instream = response.GetResponseStream();
                sr = new StreamReader(instream, encoding);
                //返回結果網頁(html)代碼  
                string content = sr.ReadToEnd();
                string err = string.Empty;

                return content;
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                return string.Empty;
            }
        }
        #endregion
    }
}

   @陳卧龍的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM