目录
C#代码中,实现Http/Https 中的POST请求,可以有很多种方式,下面就梳理下我常用的几种方式,给大家借鉴
1.首先是基础的参数
//请求地址
string url = $"https:/pczd.com/api/swj/auto/buildSln";
//请求头
Dictionary<string, string> header = new Dictionary<string, string>();
//添加Token
header.Add("Authorization", "Token");
//请求参数 这边使用JSON
JToken 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);
//创建Request
var request = new RestRequest();
//设置请求类型 POST
request.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}]");
}
}