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

C# POST请求 各种实现方法梳理

目录

1.首先是基础的参数

2.使用RestClient  

3.使用封装库  

4.使用微软原生库进行请求

5.使用HttpClient进行请求


C#代码中,实现Http/Https 中的POST请求,可以有很多种方式,下面就梳理下我常用的几种方式,给大家借鉴

1.首先是基础的参数

	//请求地址string url = $"https:/pczd.com/api/swj/auto/buildSln";//请求头Dictionary<string, string> header = new Dictionary<string, string>();//添加Tokenheader.Add("Authorization", "Token");//请求参数  这边使用JSONJToken param = new JObject();param["SlnCode"] = "Number01";param["SlnName"] = "一号上位机";param["SlnFramework"] = "Net461";//添加数组JArray jArray = JArray.FromObject(codeList);param["list"] = jArray;//得到JSON字符串string data = param.ToString();

2.使用RestClient  

使用RestClient  需要在项目中使用Nuget 引用 RestSharp包

//创建请求对象var client = new RestClient(url); //创建Requestvar request = new RestRequest();//设置请求类型 POSTrequest.Method = Method.Post;//添加请求头request.AddHeader("Authorization", "Token");request.AddHeader("Content-Type", "application/json");//添加请求体request.AddParameter("application/json", data, ParameterType.RequestBody);//发送请求var response = client.Execute(request);if(response.StatusCode==HttpStatusCode.OK){var result = string.Empty;//接收返回内容result = response.Content;//JSON 解析var resJson = JToken.Parse(result);var code = Convert.ToInt32(resJson["code"]);var msg = Convert.ToString(resJson["msg"]);if (code != 200){return new BaseResult(false, $"[{code}]{msg}");}return BaseResult.Successed;}else{return new BaseResult(false, $"[{response.StatusCode}]");}

3.使用封装库  

我自己封装的,需要Nuget引用 LS.Helper

做好一些方法的封装,在使用的过程中就能简化很多代码,和减少很多工作量

	//直接传请求头参数 和 请求JToken对象,再给个编码var resJson= LS.Helper.HttpJsonHelper.HttpPostRequest(url, header, param,dataEncoding);//返回的JToken对象,直接使用名称获取值var code = Convert.ToInt32(resJson["code"]);var msg = Convert.ToString(resJson["msg"]);if (code != 200){GlobalData.ProcessCtrl.AddOtherAlarm("MES041", $"绑定盒子码[{packingQrcode}]发生异常,接口返回信息【[{code}]{msg}】");return new BaseResult(false, $"[{code}]{msg}");}return BaseResult.Successed;

4.使用微软原生库进行请求

var request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";              request.ContentType = "application/json";request.ContentLength = data.Length;request.Headers.Add("Authorization", token.Token);request.Headers.Add("Accept-Encoding", "gzip, deflate, br");//将请求体内容写入流中byte[] paramJsonBytes;paramJsonBytes = Encoding.ASCII.GetBytes(data);request.ContentLength = paramJsonBytes.Length;Stream writer = request.GetRequestStream();writer.Write(paramJsonBytes, 0, paramJsonBytes.Length);//发送请求var response = (HttpWebResponse)request.GetResponse();if (response.StatusCode == HttpStatusCode.OK){var result = string.Empty;//使用流接收数据using (var streamReader = new StreamReader(response.GetResponseStream())){//读取流中的内容result = streamReader.ReadToEnd();//JSON序列化,返回JToken对象var resJson = JToken.Parse(result);var code = Convert.ToInt32(resJson["code"]);var msg = Convert.ToString(resJson["msg"]);if (code != 200){GlobalData.ProcessCtrl.AddOtherAlarm("MES041", $"绑定盒子码[{packingQrcode}]发生异常,接口返回信息【[{code}]{msg}】");return new BaseResult(false, $"[{code}]{msg}");}return BaseResult.Successed;}}else{return new BaseResult(false, $"[{response.StatusCode}]");}

5.使用HttpClient进行请求

using (var httpClient = new HttpClient()){//添加请求头httpClient.DefaultRequestHeaders.Add("Authorization", token.Token);//创建请求体对象var content = new StringContent(data, dataEncoding, "application/json");     //发情POST请求  此处为异步请求var task = httpClient.PostAsync(url, content);//同步方法中需要等待task.Wait();var response = task.Result;if (response.IsSuccessStatusCode){//获取返回结果,一样是异步方法var res_task = response.Content.ReadAsStringAsync();//同步方法中需要等待res_task.Wait();var result = res_task.Result;//JSON序列化JToken resJson = JObject.Parse(result);var code = Convert.ToInt32(resJson["code"]);var msg = Convert.ToString(resJson["msg"]);if (code != 200){GlobalData.ProcessCtrl.AddOtherAlarm("MES041", $"绑定盒子码[{packingQrcode}]发生异常,接口返回信息【[{code}]{msg}】");return new BaseResult(false, $"[{code}]{msg}");}return BaseResult.Successed;}else{return new BaseResult(false, $"[{response.StatusCode}]");}}

http://www.lryc.cn/news/418990.html

相关文章:

  • 《MySQL数据库》数据导入、导出、表处理—/—<4>
  • Java I/O (Input/Output)——文件字节流
  • VisionPro二次开发学习笔记4-使用C#创建绘图图形
  • 【langchain学习】使用JsonOutputParser让大模型生成结构化JSON数据
  • 【学习笔记】Matlab和python双语言的学习(最大最小化规划)
  • 基于SpringBoot的Redis开发实战教程
  • mysql 分区操作
  • [网鼎杯 2018]Comment
  • LVS详解
  • Yolo-World初步使用
  • Navicat Premium使用
  • LLC数字控制TMS320F28034,4-DSP的epwm配置介绍
  • MongoDB学习记录
  • vlunstack-2(复现红日安全-ATT CK实战)
  • 【生信入门】预览快速体验Linux-重生之小明闯Linux
  • 用.net core简易搭建webapi托管到IIS
  • 【计算机网络---OSI七层模型】
  • Error updating database. Cause: org.apache.shiro.UnavailableSecurity
  • 【网络安全】本地文件包含及远程文件包含漏洞详解
  • redis启动的三种方式
  • 手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享
  • NET的全称、主要功能以及在计算机网络中的作用?
  • LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)
  • 如何实现Redis和Mysql中数据双写一致性
  • three.js 模型高亮效果实现说明(结合react)
  • 入营测评题解
  • 制造知识普及(十)-- 常见的工业软件介绍
  • Windows系统设置网络IPv4和IPv6优先访问级
  • yolov8 剪枝 - DepGraph
  • 【网络】套接字socket编程预备知识