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>();
	//添加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}]");
        }
    }

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rotion_深

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值