使用HttpClient和WebRequest时POST一个对象的写法
【一】步骤:
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一个对象的写法的更多相关文章
- Makefile之写demo时的通用Makefile写法
Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...
- HttpClient调用webApi时注意的小问题
HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...
- httpclient访问网站时设置Accept-Encoding为gzip,deflate返回的结果为乱码的问题
近期迷恋上httpclient模拟各种网站登陆,浏览器中的开发者工具中查看请求头信息,然后照葫芦画瓢写到httpclient的请求中去,requestheader中有这么一段设置: Accept-En ...
- 使用httpclient抓取时,netstat 发现很多time_wait连接
http://wiki.apache.org/HttpComponents/FrequentlyAskedConnectionManagementQuestions 1. Connections in ...
- HttpClient 调用WebAPI时,传参的三种方式
public void Post() { //方法一,传json参数 var d = new { username = " ", password = " ", ...
- 实现在 .net 中使用 HttpClient 下载文件时显示进度
在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类.订阅 DownloadProgressChanged 事件就行了. 但是很可惜,WebC ...
- Java中迭代列表中数据时几种循环写法的效率比较
Java中经常会用到迭代列表数据的情况,本文针对几种常用的写法进行效率比较.虽然网上已经有了类似的文章,但是对他们的结论并不认同. 常见的实现方法: 1.for循环: for(int i = 0; i ...
- mysql where 条件中的字段有NULL值时的sql语句写法
比如你有一个sql语句联表出来之后是这样的 id name phone status 1 张三 ...
- mybaties实体的 Mapper.xml文件中自定义sql时模糊查询的写法
<select id=selectByNameLike" parameterType="string" resultMap="BaseResultMap ...
随机推荐
- linux安装成功后怎么调出终端
一.Ubuntu 桌面如下,点击搜索 二.输入terminal 终端 三.锁定到菜单栏 四.接下来就可以练习linux下的常用命令,如:ls mkdir cat touch 等等 这些命令后 ...
- EL概述和EL11个隐含对象
jsp有内置对象,当然EL也有隐含对象,EL的隐含对象类似于JSP内置对象.隐含对象分为三类,下面对11个隐含对象进行概述: 1.页面上下文对象(pageContext)1个 pageContext对 ...
- 正益工作能担起PaaS+SaaS的未来探索吗?
没有竞争,行业没有未来.不参与竞争,企业没有未来.中国企业的类型纷繁复杂,也决定了企业的多样化需求.云计算和移动化的双重叠加,企业管理需要重新梳理,企业业务创新日益频繁,个性化需求日益突出,软件服务商 ...
- C# — 调用dll出现试图加载不正确格式的程序问题
今天在调用百度dll包时,运行项目出现了如下警告: 修改:鼠标右击项目名称----选择属性----生成-----平台目标-----X64(由于我调用的是X64的dll包,所以这里选择X64,网上许多说 ...
- 使用Fabric Node SDK进行Invoke和Query
前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了.官方虽然提供了Node.JS,Java, ...
- Linux笔记-nohup和&
nohup:忽略SIGHUP信号,当关闭shell之后,程序仍然执行,但是如果在shell中 ctrl+c,会结束程序 &:忽略SIGINT信号,程序后台执行,在shell中 ctrl+c,程 ...
- Java 控制语句
Java 控制语句
- 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目背景 [题目描述:] 在艾泽 ...
- 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。
哎,不得不说最近见得键盘侠客太多了,做程序员没两天总是喜欢上嘴唇触天,下嘴唇碰地的吹. 自己分明都没用过几门语言,就对各门语言评头论足说三道四,这么语言多好那门语言有多烂. 可能是随着时间也变得没那么 ...
- 【刷题】若串 =’software’ ,其子串数目为:37
子串 子串是母串中的一部分,可以是母串本身,也可以是空字符串 设串中字符数为n,则其子串数目为:s=(1+n)*n/2+1 具体地: 长为0的子串:1 长为1的子串:8 长为2的子串:7 长为3的子串 ...