【一】步骤:

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一个对象的写法的更多相关文章

  1. Makefile之写demo时的通用Makefile写法

    Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN  作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...

  2. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  3. httpclient访问网站时设置Accept-Encoding为gzip,deflate返回的结果为乱码的问题

    近期迷恋上httpclient模拟各种网站登陆,浏览器中的开发者工具中查看请求头信息,然后照葫芦画瓢写到httpclient的请求中去,requestheader中有这么一段设置: Accept-En ...

  4. 使用httpclient抓取时,netstat 发现很多time_wait连接

    http://wiki.apache.org/HttpComponents/FrequentlyAskedConnectionManagementQuestions 1. Connections in ...

  5. HttpClient 调用WebAPI时,传参的三种方式

    public void Post() { //方法一,传json参数 var d = new { username = " ", password = " ", ...

  6. 实现在 .net 中使用 HttpClient 下载文件时显示进度

    在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类.订阅 DownloadProgressChanged 事件就行了. 但是很可惜,WebC ...

  7. Java中迭代列表中数据时几种循环写法的效率比较

    Java中经常会用到迭代列表数据的情况,本文针对几种常用的写法进行效率比较.虽然网上已经有了类似的文章,但是对他们的结论并不认同. 常见的实现方法: 1.for循环: for(int i = 0; i ...

  8. mysql where 条件中的字段有NULL值时的sql语句写法

    比如你有一个sql语句联表出来之后是这样的 id           name            phone                  status 1            张三     ...

  9. mybaties实体的 Mapper.xml文件中自定义sql时模糊查询的写法

    <select  id=selectByNameLike" parameterType="string" resultMap="BaseResultMap ...

随机推荐

  1. javaScript判断手机型号

    window.onload = function () { alert("1"); var u = navigator.userAgent; if (u.indexOf('Andr ...

  2. Docker(3):Dockerfile配置详解

    FROM  : 指定base镜像 MAINTAINER :设置镜像的作者,可以是任意的字符串 COPY :将文件从build context 复制到镜像   COPY 支持两种形式:COPY src ...

  3. CentOS 6.5 minimal 安装配置VMware tools

    1.登录到系统,切换到root账户 2.配置网络 minimal版本默认不启动网络,所以要自己配置. 配置过程很简单,编辑配置文件 vi /etc/sysconfig/network-script/i ...

  4. 10-ajax技术简介

    一.ajax是什么?是网页中的异步刷新技术.其核心是js+xml二.执行过程1.js的核心对象XMLHttpRequest是一个具备像后台发送请求的一个对象2.XMLHttpRequest可以异步发送 ...

  5. 命令行获取zabbix最新的issues - jq 解释json

    0.安装jq wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 chmod +x ./jq c ...

  6. xgboost 参数调优指南

    一.XGBoost的优势 XGBoost算法可以给预测模型带来能力的提升.当我对它的表现有更多了解的时候,当我对它的高准确率背后的原理有更多了解的时候,我发现它具有很多优势: 1 正则化 标准GBDT ...

  7. 开发工具IntelliJ IDEA的安装步骤及首次启动和创建项目

    开发工具IDEA概述 DEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公 ...

  8. [Alpha阶段]第六次Scrum Meeting

    Scrum Meeting博客目录 [Alpha阶段]第六次Scrum Meeting 基本信息 名称 时间 地点 时长 第六次Scrum Meeting 19/04/10 教2 1层 50min 相 ...

  9. 字符串格式的方法%s、format和python3.6新特性f-string和类型注解

    一.%s msg = '我叫%s,今年%s,性别%s' %('帅哥',18,'男') print(msg) # 我叫帅哥,今年18,性别男 二.format # 三种方式: # 第一种:按顺序接收参数 ...

  10. CSS实现动画特效导航栏

    0 写在前面 今天用纯CSS编写了一种带有特效的导航栏,一方面巩固熟悉了导航栏的一般写法,另一方面练习了CSS3的一些新特性. 1 实现效果 当鼠标划过时,实现了一种动态百叶窗效果. 2 实现细节 2 ...