使用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 ...
随机推荐
- slice()和splice()区别
1.slice(start,end):方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素. 注意:该方法不会改变原数组,而是返回一个子数组,如果想删除 ...
- idea怎么配置spring
前提基础: 1.idea软件并JDK成功能用 2.有tacate,并会导入. 3.了解jsp和mvc基本结构 详细介绍: https://www.cnblogs.com/wormday/p/84356 ...
- c# 日期函数DateTime.ToString()日期的各种格式
//c# datetime 格式化 DateTime dt = DateTime.Now; //2017/11/14 10:46:56 label1.Text = dt.ToString();//20 ...
- Putty中的pscp和psftp的简明用法
用习惯了putty,那是真心的方便啊,putty文件夹下其他的小兄弟也不能忽略啊. 以前的时候,从远程服务器下载个文件用winscp,后来,发现在putty文件夹里好像有一个 pscp和psftp,今 ...
- 不安分的 Go 语言开始入侵 Web 前端领域了!( WebAssembly )
参考:https://blog.csdn.net/csdnnews/article/details/84038848 从 Go 语言诞生以来,它就开始不断侵蚀 Java .C.C++ 语言的领地.今年 ...
- ubuntu添加普通用户,并解决远程登录
创建普通用户 # 创建用户,并指定用户目录,加入用户组sudo useradd username -d /home/username -m #设置密码 sudo passwd username #给用 ...
- 函数rand,randn,randi
1,rand 生成均匀分布的伪随机数.分布在(0~1)之间主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是 ...
- PySocks安装使用方法
PySocks是一个基于Python的SOCKS代理客户端,它是SocksiPy的一个分支,修改了一些bug和增加了一些额外功能. ---------------------------------- ...
- odoo10.0在odoo12.0环境的基础上搭建环境
在前边的文章中,讲述了如何搭建12.0的环境,现由业务的需要需要在此基础上搭建基于python2.7的10.0版本. 第一步,安装python2.7 sudo apt- 第二步,安装python-de ...
- python __init__() 和__new__()简析
先看下面一个例子: 如上图,例1中,构造了函数Foo,并重写了__new__()和__init__()方法,在实例化Foo()的时候,却只调用了__new__() 例2中,在实例化Too()对象时,同 ...