常见数据格式
- 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") { } }
来源:https://www.cnblogs.com/elef/p/12222089.html