当前位置: 首页 > news >正文

C# API POST与GET的调用

C# API POST与GET的调用

WebClient与HttpWebRequest HttpClient没测试

WebClient与HttpWebRequest还有HttpClient的区别

继承关系

Object --> MarshalByRefObject --> Component --> WebClient
提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。

Object --> MarshalByRefObject --> WebRequest --> HttpWebRequest
提供 WebRequest 类的 HTTP 特定的实现。

Object --> HttpMessageInvoker --> HttpClient
用于发送 HTTP 请求并从 URI 标识的资源接收 HTTP 响应。

从继承关系上来看 WebClient要比HttpWebRequest要高一层,HttpClient和其他两个基本关系不大
从介绍上来看 HttpClient是针对Http的请求,而其他两个是针对URI的资源请求和接收

使用关系

WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。使用WebClient可能比HttpWebRequest直接使用更慢(大约几毫秒),但却更为简单,减少了很多细节,代码量也比较少。

HttpWebRequest 这是.NET创建者最初开发用于使用HTTP请求的标准类。使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复杂一些。

HttpClient是.NET4.5引入的一个HTTP客户端库,其命名空间为 System.Net.Http ,.NET 4.5之前我们可能使用WebClient和HttpWebRequest来达到相同目的。HttpClient利用了最新的面向任务模式,使得处理异步请求非常容易。它适合用于多次请求操作,一般设置好默认头部后,可以进行重复多次的请求,基本上用一个实例可以提交任何的HTTP请求。HttpClient有预热机制,第一次进行访问时比较慢,所以不应该用到HttpClient就new一个出来,应该使用单例或其他方式获取HttpClient的实例.

代码示例

namespace API读取写入程序
{
    public class HttpHelper
    {

        /// <summary>
        /// 使用 POST 方法将指定的字符串上载到指定的资源
        /// </summary>
        /// <param name="address">接收字符串的资源的 URI</param>
        /// <param name="data">上载的字符串</param>
        /// <returns></returns>
        public static string Post_WebClient(string address, string data = "")
        {
            //初始化配置
            WebClient client = new WebClient();
            client.Headers[HttpRequestHeader.ContentType] = "application/json";
            client.Headers.Add("Channel", "1102");
            //添加防止乱码
            client.Encoding = Encoding.UTF8;
            string result = client.UploadString(address, data);
            //返回数据
            return result;
        }

        /// <summary>
        ///  使用 GET 方法下载请求的资源
        /// </summary>
        /// <param name="address">要下载的 URI 的数据</param>
        /// <returns></returns>
        public static string Get_WebClient(string address)
        {
            //初始化配置
            WebClient client = new WebClient();
            //添加防止乱码
            client.Encoding = Encoding.UTF8;
            string result = client.DownloadString(address);
            //返回数据
            return result;
        }

        /// <summary>
        /// 带超时的Post发送Json,实现超时重发,启用接口日志
        /// </summary>
        /// <param name="address">地址</param>
        /// <param name="data">Json字符串</param>
        /// <param name="encoding">编码类型</param>
        /// <param name="timeout">超时时间</param>
        /// <returns></returns>
        public static string Post_HttpWebRequest(string address, string data, Encoding encoding, int timeout)
        {
            //初始化配置
            HttpWebRequest tmpRequest = (HttpWebRequest)WebRequest.Create(address);
            tmpRequest.Method = "POST";
            tmpRequest.KeepAlive = false;
            tmpRequest.Timeout = timeout;
            tmpRequest.ContentType = "application/json";
            byte[] tmpBts = encoding.GetBytes(data);
            tmpRequest.ContentLength = tmpBts.Length;
            //提交数据
            Stream tmpRequestStream = tmpRequest.GetRequestStream();
            tmpRequestStream.Write(tmpBts, 0, tmpBts.Length);
            tmpRequestStream.Flush();
            //接收数据  
            HttpWebResponse tmpResponse = (HttpWebResponse)tmpRequest.GetResponse();
            Stream tmpResponseStream = tmpResponse.GetResponseStream();
            StreamReader tmpStreamReader = new StreamReader(tmpResponseStream, encoding);
            string retString = tmpStreamReader.ReadToEnd();
            //关闭
            tmpStreamReader.Close();
            tmpResponseStream.Close();
            tmpRequestStream.Close();
            //返回数据
            return retString;
        }

        internal static string Post_WebClient(string servPath, object value)
        {
            throw new NotImplementedException();
        }
    }
    public interface IBusiness
    {
        public (bool bResult, string strErrMsg) Login(string account, string password);
    }
    public class Business : IBusiness
    {
        public (bool bResult, string strErrMsg) Login(string username, string password)
        {
            try
            {
                //定义传输的json
                JObject jo = new JObject();
                jo.Add("channel", channel);
                jo.Add("libCode", libCode);
                jo.Add("number", number);
                jo.Add("totalNum", totalNum);
                string servPath = @$"http://192.168.1.253:7072/platform/token/login";
                //API操作
                string result = HttpHelper.Post_WebClient(servPath, jo.ToString());
                jo = JObject.Parse(result);
                bool bRes = (bool)jo["success"];
                //返回值 赋值与操作
                if (bRes)
                {
                    if (string.IsNullOrEmpty(jo["data"].ToString()))
                    {

                    }
                }
                return (bRes, jo["message"].ToString());
            }
            catch (Exception ex)
            {
                return (false, ex.Message);
            }
        }
    }
}

总结

以上就是这次的总结了,后面在进行整理.

2022/11/1

相关文章:

  • 在什么网站可以做推广/宣传推广
  • 公司做网站需要准备什么材料/免费做网页的网站
  • 如何自己做网站推广淘宝客/星力游戏源码
  • 网站建设的需要是什么/谁有恶意点击软件
  • 网站品牌栏目建设/艾瑞指数
  • 哪些网站做的比较好/seo排名如何
  • pytest常用插件使用大全
  • 浅谈微机综合自动化系统在化工企业变电站中应用
  • 计算就是创造力!阿里云与FIRST影展设立“无影创作奖”
  • JavaScript 63 JavaScript 对象 63.2 JavaScript 对象属性
  • Python configparser模块
  • 梦开始的地方 —— C语言指针进阶
  • 计算机毕设(附源码)JAVA-SSM基于的智慧校园安防综合管理系统
  • (七)Mybatis传值中#{}和${}的区别,及别名机制
  • 云原生之快速使用Nacos Spring Cloud
  • 【Vue】vue-router的基本使用 | 路由懒加载 | 补充知识点
  • 装了我这 10 个 IDEA 神级插件后,同事也开始情不自禁的嘚瑟了
  • java-php-python-火炬中学校刊在线投稿审稿系统计算机毕业设计