分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

使用HttpClient和WebRequest时POST一个对象的写法

发布时间:2023-09-06 02:16责任编辑:蔡小小关键词:WebPOST

【一】步骤:

1)将对象转化为Json字符串。

2)将Json字符串编码为byte数组。

3)设置传输对象(WebRequest或者HttpClient)的ContentType是"application/json"。

4)设置传输对象的ContentLength=Byte数组的长度。

5)开始传输

6)获取JSON结果:

【二】示例代码:

【对于WebRequest而言】

static void SendByWebRequesttoApi() ???????{ ???????????WebRequest req = WebRequest.Create("http://localhost:15203/api/ApiDefault"); ???????????var stu = new Student { ID = 1, Name = "董玮" }; ???????????string jsonString = JsonConvert.SerializeObject(stu); ???????????byte[] objectContent = Encoding.UTF8.GetBytes(jsonString); ???????????req.ContentLength = objectContent.Length; ???????????req.ContentType = "application/json"; ???????????req.Method = "POST"; ???????????using (var stream = req.GetRequestStream()) ???????????{ ???????????????stream.Write(objectContent, 0, objectContent.Length); ???????????????stream.Close(); ???????????} ???????????var resp = req.GetResponse(); ???????????using (StreamReader sr = new StreamReader(resp.GetResponseStream())) ???????????{ ???????????????string s = sr.ReadToEnd(); ???????????????System.Console.WriteLine(s); ???????????} ???????}

【对于HttpClient而言】

static void SendByHttpClienttoApi() ???????{ ???????????var stu = new { ID = 1, Name = "董玮" }; ???????????using (var client = new HttpClient()) ???????????{ ???????????????string jsonString = JsonConvert.SerializeObject(stu); ???????????????byte[] bytes = Encoding.UTF8.GetBytes(jsonString); ???????????????using (StreamContent sc = new StreamContent(new MemoryStream(bytes))) ???????????????{ ???????????????????sc.Headers.ContentLength = bytes.Length; ???????????????????sc.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); ???????????????????var result = client.PostAsync("http://localhost:15203/api/ApiDefault", sc).Result; ???????????????????var objectResult = JsonConvert.DeserializeObject<Student>(result.Content.ReadAsStringAsync().Result); ???????????????} ???????????} ???????}

另外注意,以上是针对WebApi(WebApi默认是JSON格式数据传输)。如果是MVC的模式,那么默认是表单形式传输。因此:

 static void SendByWebRequesttoMVC() ???????{ ???????????WebRequest req = WebRequest.Create("http://localhost:15203/Default/DoGetStudent"); ???????????var htmlFormPost = "ID=1&Name=董玮"; ???????????byte[] objectContent = Encoding.UTF8.GetBytes(htmlFormPost); ???????????req.ContentLength = objectContent.Length; ???????????req.ContentType = "application/x-www-form-urlencoded"; ??//必须写! ???????????req.Method = "POST"; ???????????using (var stream = req.GetRequestStream()) ???????????{ ???????????????stream.Write(objectContent, 0, objectContent.Length); ???????????????stream.Close(); ???????????} ???????????var resp = req.GetResponse(); ???????????using (StreamReader sr = new StreamReader(resp.GetResponseStream())) ???????????{ ???????????????string s = sr.ReadToEnd(); ???????????????System.Console.WriteLine(s); ???????????} ???????}

在HttpClient中,把StreamContent改为FormUrlEncodedContent,传入一个Dictionary<string,string>对象即可:

 static void SendByHttpClienttoMVC() ???????{ ???????????using (var client = new HttpClient()) ???????????{ ???????????????FormUrlEncodedContent fc = new FormUrlEncodedContent(new Dictionary<string, string>() { { "ID", "1" }, { "Name", "董玮" } }); ???????????????var result = client.PostAsync("http://localhost:15203/Default/DoGetStudent", fc).Result; ???????????????System.Console.WriteLine(result.Content.ReadAsStringAsync().Result); ???????????} ???????}

使用HttpClient和WebRequest时POST一个对象的写法

原文地址:https://www.cnblogs.com/coce/p/9721034.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved