C# ASP.NET Core使用HttpClient的同步和異步請求
阿新 • • 發佈:2019-02-12
form div sin try out lba sts namespace aps
引用 Newtonsoft.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 = newpostSystem.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; }
參數為鍵值對:var content = new FormUrlEncodedContent(postData);
使用HttpClient 請求的時候碰到個問題不知道是什麽異常,用HttpWebResponse請求才獲取到異常,設置ServicePointManager可以用,參考下面這個
/// <summary> /// http請求接口 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="postData"></param> /// <returns></returns> public T httpClientPost<T>(string url, string postData) where T : class, new() { T result = default(T); ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 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; } public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { // 總是接受 return true; } /// <summary> /// http請求接口 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="bodyString"></param> /// <returns></returns> public VMDataResponse<T> HttpPost<T>(string url, string bodyString) { var result = new VMDataResponse<T>(); try { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); var request = WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json; charset=utf-8"; byte[] buffer = Encoding.UTF8.GetBytes(bodyString); request.ContentLength = buffer.Length; System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; request.GetRequestStream().Write(buffer, 0, buffer.Length); var response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode != HttpStatusCode.OK) { result.msg = "錯誤:Respose返回不是StatusCode!=OK"; result.status = 500; logger.Error(result.msg); return result; } using (var ss = response.GetResponseStream()) { byte[] rbs = new byte[4096]; int count = 0; string str = ""; while (ss != null && (count = ss.Read(rbs, 0, rbs.Length)) > 0) { str += Encoding.UTF8.GetString(rbs, 0, count); } var msg = str; //logger.Error("返回信息" + msg); if (!string.IsNullOrWhiteSpace(msg)) { result.data = JsonConvert.DeserializeObject<T>(msg); return result; } } } catch (Exception ex) { result.msg = "錯誤:請求出現異常消息:" + ex.Message; result.status = 600; logger.Error(result.msg); return result; } return result; }post
get:
// 泛型: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; }View Code
put:
// 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; }View Code
https://blog.csdn.net/sun_zeliang/article/details/81587835
https://blog.csdn.net/baidu_32739019/article/details/78679129
ASP.NET Core使用HttpClient的同步和異步請求
ASP.NET Core使用HttpClient的同步和異步請求 using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web; namespace Common { public class HttpHelper {/// <summary> /// 發起POST同步請求 /// /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param> /// <param name="headers">填充消息頭</param> /// <returns></returns> public static string HttpPost(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary<string, string> headers = null) { postData = postData ?? ""; using (HttpClient client = new HttpClient()) { if (headers != null) { foreach (var header in headers) client.DefaultRequestHeaders.Add(header.Key, header.Value); } using (HttpContent httpContent = new StringContent(postData, Encoding.UTF8)) { if (contentType != null) httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); HttpResponseMessage response = client.PostAsync(url, httpContent).Result; return response.Content.ReadAsStringAsync().Result; } } } /// <summary> /// 發起POST異步請求 /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param> /// <param name="headers">填充消息頭</param> /// <returns></returns> public static async Task<string> HttpPostAsync(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary<string, string> headers = null) { postData = postData ?? ""; using (HttpClient client = new HttpClient()) { client.Timeout = new TimeSpan(0, 0, timeOut); if (headers != null) { foreach (var header in headers) client.DefaultRequestHeaders.Add(header.Key, header.Value); } using (HttpContent httpContent = new StringContent(postData, Encoding.UTF8)) { if (contentType != null) httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); HttpResponseMessage response = await client.PostAsync(url, httpContent); return await response.Content.ReadAsStringAsync(); } } } /// <summary> /// 發起GET同步請求 /// </summary> /// <param name="url"></param> /// <param name="headers"></param> /// <param name="contentType"></param> /// <returns></returns> public static string HttpGet(string url, string contentType = null, Dictionary<string, string> headers = null) { using (HttpClient client = new HttpClient()) { if (contentType != null) client.DefaultRequestHeaders.Add("ContentType", contentType); if (headers != null) { foreach (var header in headers) client.DefaultRequestHeaders.Add(header.Key, header.Value); } HttpResponseMessage response = client.GetAsync(url).Result; return response.Content.ReadAsStringAsync().Result; } } /// <summary> /// 發起GET異步請求 /// </summary> /// <param name="url"></param> /// <param name="headers"></param> /// <param name="contentType"></param> /// <returns></returns> public static async Task<string> HttpGetAsync(string url, string contentType = null, Dictionary<string, string> headers = null) { using (HttpClient client = new HttpClient()) { if (contentType != null) client.DefaultRequestHeaders.Add("ContentType", contentType); if (headers != null) { foreach (var header in headers) client.DefaultRequestHeaders.Add(header.Key, header.Value); } HttpResponseMessage response = await client.GetAsync(url); return await response.Content.ReadAsStringAsync(); } } } }View Code
調用異步請求方法:
var result = await HttpHelper.HttpPostAsync("http://www.baidu.com/api/getuserinfo", "userid=23456798");
https://www.cnblogs.com/pudefu/p/7581956.html
https://blog.csdn.net/slowlifes/article/details/78504782
C# ASP.NET Core使用HttpClient的同步和異步請求