引用 Newtonsoft.Json json
// Post請求 public string PostResponse(string url,string postData,out string statusCode) { string result = string.Empty; //設置Http的正文 HttpContent httpContent = new StringContent(postData); //設置Http的內容標頭 httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); //設置Http的內容標頭的字符 httpContent.Headers.ContentType.CharSet = "utf-8"; using(HttpClient httpClient=new HttpClient()) { //異步Post HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; //輸出Http響應狀態碼 statusCode = response.StatusCode.ToString(); //確保Http響應成功 if (response.IsSuccessStatusCode) { //異步讀取json result = response.Content.ReadAsStringAsync().Result; } } return result; } // 泛型:Post請求 public T PostResponse<T>(string url,string postData) where T:class,new() { T result = default(T); HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; using(HttpClient httpClient=new HttpClient()) { HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; //Newtonsoft.Json string json = JsonConvert.DeserializeObject(s).ToString(); result = JsonConvert.DeserializeObject<T>(json); } } return result; } // 泛型:Get請求 public T GetResponse<T>(string url) where T :class,new() { T result = default(T); using (HttpClient httpClient=new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; string json = JsonConvert.DeserializeObject(s).ToString(); result = JsonConvert.DeserializeObject<T>(json); } } return result; } // Get請求 public string GetResponse(string url, out string statusCode) { string result = string.Empty; using (HttpClient httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { result = response.Content.ReadAsStringAsync().Result; } } return result; } // Put請求 public string PutResponse(string url, string putData, out string statusCode) { string result = string.Empty; HttpContent httpContent = new StringContent(putData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; using (HttpClient httpClient = new HttpClient()) { HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { result = response.Content.ReadAsStringAsync().Result; } } return result; } // 泛型:Put請求 public T PutResponse<T>(string url, string putData) where T : class, new() { T result = default(T); HttpContent httpContent = new StringContent(putData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; using(HttpClient httpClient=new HttpClient()) { HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; string json = JsonConvert.DeserializeObject(s).ToString(); result = JsonConvert.DeserializeObject<T>(json); } } return result; }
出處:https://blog.csdn.net/sun_zeliang/article/details/81587835api
========================================================app
我本身把上面的修改下,能夠不引用 Newtonsoft.Json ,在POST模式的方法PostWebAPI增長了GZip的支持,請求超時設置,其餘的功能能夠本身去擴展,增長了簡單調用的方式。異步
後續能夠擴展異步方式、HttpWebRequest方式調用Webapi(待完成。。。)ide
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace Car.AutoUpdate.Comm { public class WebapiHelper { #region HttpClient /// <summary> /// Get請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <returns></returns> public static string GetWebAPI(string url) { string result = ""; string strOut = ""; try { result = GetWebAPI(url, out strOut); } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Get請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <param name="statusCode">Response返回的狀態</param> /// <returns></returns> public static string GetWebAPI(string url, out string statusCode) { string result = string.Empty; statusCode = string.Empty; try { using (HttpClient httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { result = response.Content.ReadAsStringAsync().Result; } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Get請求指定的URL地址 /// </summary> /// <typeparam name="T">返回的json轉換成指定實體對象</typeparam> /// <param name="url">URL地址</param> /// <returns></returns> public static T GetWebAPI<T>(string url) where T : class, new() { T result = default(T); try { using (HttpClient httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; string jsonNamespace = DeserializeObject<T>(s).ToString(); result = DeserializeObject<T>(s); } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Post請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <param name="postData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <returns></returns> public static string PostWebAPI(string url, string postData) { string result = ""; HttpStatusCode strOut = HttpStatusCode.BadRequest; try { result = PostWebAPI(url, postData, out strOut); } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Post請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <param name="postData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <param name="statusCode">Response返回的狀態</param> /// <returns></returns> public static string PostWebAPI(string url, string postData, out HttpStatusCode httpStatusCode) { string result = string.Empty; httpStatusCode = HttpStatusCode.BadRequest; //設置Http的正文 HttpContent httpContent = new StringContent(postData); //設置Http的內容標頭 httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); //設置Http的內容標頭的字符 httpContent.Headers.ContentType.CharSet = "utf-8"; HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; try { //using (HttpClient httpClient = new HttpClient(httpHandler)) using (HttpClient httpClient = new HttpClient()) { httpClient.Timeout = new TimeSpan(0, 0, 5); //異步Post HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; //輸出Http響應狀態碼 httpStatusCode = response.StatusCode; //確保Http響應成功 if (response.IsSuccessStatusCode) { //異步讀取json result = response.Content.ReadAsStringAsync().Result; } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Post請求指定的URL地址 /// </summary> /// <typeparam name="T">返回的json轉換成指定實體對象</typeparam> /// <param name="url">URL地址</param> /// <param name="postData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <returns></returns> public static T PostWebAPI<T>(string url, string postData) where T : class, new() { T result = default(T); HttpContent httpContent = new StringContent(postData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; try { using (HttpClient httpClient = new HttpClient(httpHandler)) { HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; //Newtonsoft.Json string jsonNamespace = DeserializeObject<T>(s).ToString(); result = DeserializeObject<T>(s); } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Put請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <param name="putData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <returns></returns> public static string PutWebAPI(string url, string putData) { string result = ""; string strOut = ""; result = PutWebAPI(url, putData, out strOut); return result; } /// <summary> /// Put請求指定的URL地址 /// </summary> /// <param name="url">URL地址</param> /// <param name="putData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <param name="statusCode">Response返回的狀態</param> /// <returns></returns> public static string PutWebAPI(string url, string putData, out string statusCode) { string result = statusCode = string.Empty; HttpContent httpContent = new StringContent(putData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; try { using (HttpClient httpClient = new HttpClient()) { HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; statusCode = response.StatusCode.ToString(); if (response.IsSuccessStatusCode) { result = response.Content.ReadAsStringAsync().Result; } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// Put請求指定的URL地址 /// </summary> /// <typeparam name="T">返回的json轉換成指定實體對象</typeparam> /// <param name="url">URL地址</param> /// <param name="putData">提交到Web的Json格式的數據:如:{"ErrCode":"FileErr"}</param> /// <returns></returns> public static T PutWebAPI<T>(string url, string putData) where T : class, new() { T result = default(T); HttpContent httpContent = new StringContent(putData); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); httpContent.Headers.ContentType.CharSet = "utf-8"; try { using (HttpClient httpClient = new HttpClient()) { HttpResponseMessage response = httpClient.PutAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { Task<string> t = response.Content.ReadAsStringAsync(); string s = t.Result; string jsonNamespace = DeserializeObject<T>(s).ToString(); result = DeserializeObject<T>(s); } else { LogHelper.Warn("調用後臺服務返回失敗:" + url + Environment.NewLine + SerializeObject(response)); } } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return result; } /// <summary> /// 對象轉JSON /// </summary> /// <param name="obj">對象</param> /// <returns>JSON格式的字符串</returns> public static string SerializeObject(object obj) { JavaScriptSerializer jss = new JavaScriptSerializer(); try { return jss.Serialize(obj); } catch (Exception ex) { LogHelper.Error("JSONHelper.SerializeObject 轉換對象失敗。", ex); throw new Exception("JSONHelper.SerializeObject(object obj): " + ex.Message); } } /// <summary> /// 將Json字符串轉換爲對像 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json"></param> /// <returns></returns> public static T DeserializeObject<T>(string json) { JavaScriptSerializer Serializer = new JavaScriptSerializer(); T objs = default(T); try { objs = Serializer.Deserialize<T>(json); } catch (Exception ex) { LogHelper.Error("JSONHelper.DeserializeObject 轉換對象失敗。", ex); throw new Exception("JSONHelper.DeserializeObject<T>(string json): " + ex.Message); } return objs; } #endregion private static HttpResponseMessage HttpPost(string url, HttpContent httpContent) { HttpResponseMessage response = null; HttpClientHandler httpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; try { //using (HttpClient httpClient = new HttpClient(httpHandler)) using (HttpClient httpClient = new HttpClient()) { httpClient.Timeout = new TimeSpan(0, 0, 5); //異步Post response = httpClient.PostAsync(url, httpContent).Result; } } catch (Exception ex) { LogHelper.Error("調用後臺服務出現異常!", ex); } return response; } } }
下面再分享一個幫助類,有用到的作個參考吧post
using HtmlAgilityPack; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace WebCollect.CommonHelp { public static class CommonHelper { #region HttpClient private static HttpClient _httpClient; public static HttpClient httpClient { get { if (_httpClient == null) { _httpClient = new HttpClient(); _httpClient.Timeout = new TimeSpan(0, 1, 0); } return _httpClient; } set { _httpClient = value; } } #endregion #region get請求 /// <summary> /// get請求返回的字符串 /// </summary> /// <param name="url"></param> /// <returns></returns> public static string GetRequestStr(string url) { try { var response = httpClient.GetAsync(new Uri(url)).Result; return response.Content.ReadAsStringAsync().Result; } catch (Exception) { return null; } } /// <summary> /// get請求返回的二進制 /// </summary> /// <param name="url"></param> /// <returns></returns> public static byte[] GetRequestByteArr(string url) { try { var response = httpClient.GetAsync(new Uri(url)).Result; return response.Content.ReadAsByteArrayAsync().Result; } catch (Exception) { return null; } } #endregion #region post請求 /// <summary> /// post請求返回的字符串 /// </summary> /// <param name="url"></param> /// <returns></returns> public static string PostRequestStr(string url) { try { string contentStr = ""; StringContent sc = new StringContent(contentStr); sc.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");//todo var response = httpClient.PostAsync(new Uri(url), sc).Result; return response.Content.ReadAsStringAsync().Result; } catch (Exception) { return null; } } #endregion } }