• C# ASP.NET Core使用HttpClient的同步和异步请求


    引用 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 = 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;
            }
    post

    参数为键值对: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

  • 相关阅读:
    读取Java文件到byte数组的三种方式
    https://blog.csdn.net/eguid_1/article/category/6270094
    JavaCV 学习(一):JavaCV 初体验
    WebService服务发布与使用(JDK自带WebService)
    SourceTree 免登录跳过初始设置
    Owin password
    IIS并发
    压力测试
    nginx
    消息队列MSMQ
  • 原文地址:https://www.cnblogs.com/love201314/p/10320763.html
Copyright © 2020-2023  润新知