HttpClient 提交 JSON數據


常見數據格式

  • 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")
       { }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM