常見數據格式
-
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")
{ }
}