常见数据格式

  • application/x-www-form-urlencoded

    这也是最常见的 POST 提交数据的方式,一般是用来提交表单。

  • multipart/form-data

    上传文件时通常采用的数据格式

  • application/json

    API接收和返回的常见格式

  • text/xml

    可能还有一些数据交换的场景采用的格式

关于 HttpContent

HttpContent 是一个抽象类

public abstract class HttpContent: IDisposable
{
protected HttpContent();
public HttpContentHeaders Headers
{
get;
}
public Task CopyToAsync(Stream stream, TransportContext context);
public Task CopyToAsync(Stream stream);
public void Dispose();
public Task LoadIntoBufferAsync();
public Task LoadIntoBufferAsync(long maxBufferSize);
public Task < byte[] > ReadAsByteArrayAsync();
public Task < Stream > ReadAsStreamAsync();
public Task < string > ReadAsStringAsync();
protected virtual Task < Stream > CreateContentReadStreamAsync();
protected virtual void Dispose(bool disposing);
protected abstract Task SerializeToStreamAsync(Stream stream, TransportContext context);
protected internal abstract bool TryComputeLength(out long length);
}

那我们就不可能直接创建HttpContent的实例, 而需要去找他的实现类, 如下四个:

MultipartFormDataContent、FormUrlEncodedContent、StringContent、StreamContent

和4中常见数据格式对应一下:

MultipartFormDataContent =》 multipart/form-data

FormUrlEncodedContent =》 application/x-www-form-urlencoded

StringContent =》 application/json等

StreamContent =》 binary

HttpClient 提交Json 数据

在谈如何处理JSON前,插入一个form表单提交的示例代码

//请求Body
var body = new Dictionary <string,string> ()
{
{
"from", "sender"
},
{
"to", "receiver"
}
};
HttpContent content = new FormUrlEncodedContent(body);
var response = client.PostAsync(apiAddress, content).Result;

这里也考虑仿照表单提交的情况,有个特殊格式的HttpContent 继承类,接收一个对象变量

json本质上还是一种特殊的字符串格式,我们可以 在StringContent的基础上创建一个子类,接收对象变量,转换成字符串,增加application/json 的表头信息

创建一个新的类

public class JsonContent : StringContent
{
public JsonContent(object obj) :
base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
{ }
}

最新文章

  1. 探索C#之布隆过滤器(Bloom filter)
  2. UNIX进程
  3. [改善Java代码]用整数类型处理货币
  4. 关于自己的ES6使用姿势
  5. jQuery 如何设置input checkbox 更有效 prop()
  6. 01:Hello, World!
  7. .net 地址栏传中文乱码 的解决方法
  8. BestCoder Round #20 部分题解(A,B,C)(hdu5123,5124,5125)
  9. SCU 3133(博弈)
  10. hbuilder 手机app开发系列(一)
  11. Hibernate基础学习(七)&mdash;检索方式
  12. 调用惯例Calling Convention (或者说:调用约定)
  13. python之re正则简单够用
  14. Get WMS Static GoodLocation By Dynamic SQL
  15. ZOJ Problem Set - 3706
  16. CentOS7 nexus 3 搭建maven或gradle 私有代理服务器
  17. Redis高可用 Sentinel
  18. JSP页面导致tomcat内存溢出一例
  19. module &#39;sign.views&#39; has no attribute &#39;search_name&#39;
  20. ListView中的item中的Onclick事件的优化

热门文章

  1. 记一次在CentOS上安装GitLab的流程
  2. vivo 服务端监控体系建设实践
  3. day05-Vue02
  4. ArcGIS工具 - 按字段分割图层
  5. s2-007
  6. 广工Anyview【DC02PE97】解析
  7. ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观
  8. 构建api gateway之 基于etcd实现动态配置同步
  9. CSP-J2022游寄
  10. CSS常用属性(3)