日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpClient系列~StringContent与FormUrlEncodedContent

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpClient系列~StringContent与FormUrlEncodedContent 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

知識點

本文是一個很另類的文章,在項目中用的比較少,但如果項目中真的出現了這種情況,我們也需要知道如何去解決,對于知識點StringContent和FormUrlEncodedContent我們應該了解的多一點,FormUrlEncodedContent是以鍵/值對的形式進行POST數據的提供,同時要求服務端以x-www-form-urlencoded的方式去接收數據!而StringContent是ByteArrayContent的一個子集,也是MultipartFormDataContent的一個子集,在進行大數據傳輸時,我們需要使用這種方法,如果傳遞的是字符串,可以采用StringContent,如果是二進制流,可以使用ByteArrayContent,而這兩種方式都可以對外以MultipartFormDataContent的形式體現,而在服務端要以mutipart/form-data的方式來接收數據!

再深一點

multipart/form-data: 就是http請求中的multipart/form-data,它會將表單的數據處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。當上傳的字段是文件時,會有Content-Type來表名文件類型;content-disposition,用來說明字段的一些信息;由于有boundary(分隔符號)隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對,它采用了鍵值對的方式,所以可以上傳多個文件。

x-www-form-urlencoded:會將表單數據轉成鍵/值對進行傳遞,有大小的限制,一般是2M。

Raw:可以上傳任何格式文本,你需要顯示的說明content-type,如text/plain,text/html,text/json,text/xml等。

Binary:一般上傳文件流,它相當于content-type為application/octet-stream的情況。

從上面的介紹不難發現,raw和binary方式都屬于multipart/form-data,只不過是兩種不同的體現而以。

DotNet平臺為WebAPI傳遞大數據

對于普通方式的HttpClient(x-www-form-urlencoded)有時已經不能滿足我們的需要了,所以必須上multipart/form-data,即在HttpClient構建時,采用StringContent的內容類型,下面是在客戶端構建一個HttpClient的方式,以服務端(webapi restful)傳遞一個大大的JSON對象!

?

         var list = new List<TestApiModel>();entity.Category = new Category { Title = "北京" };entity.OrderList = new List<OrderList> {new OrderList{Price=1,ProductName="tel",Address=new Address {Province="印度"}},new OrderList{Price=100,ProductName="tv",Address=new Address {Province="日本"}},new OrderList{Price=999,ProductName="pc",Address=new Address {Province="美國"}}};for (int i = 0; i <= 100; i++)list.Add(entity);var handler = new HttpClientHandler(){AutomaticDecompression = System.Net.DecompressionMethods.GZip};using (var http = new HttpClient(handler)){var body = entity.ToNameValueCollection();var content = new StringContent(list.ToJson(), Encoding.UTF8, "text/json");var responseResult = http.PostAsync(UriAddress, content).Result;}

?

如果客戶端采用了這種StringContent的方式,那么在設計WebApi時只有兩種選擇,第一種就是使用JSON強類型(類對象)的參數,第二種就是不寫參數(空),如果使用string類型的參數,那這個接口無法被找到,即出現的結果是404的狀態碼!下面看一下服務端的數據處理,也是很簡單!

public async Task<HttpResponseMessage> Post()//沒有參數表示使用raw,form-data方式進行傳輸{try{var data =await Request.Content.ReadAsStringAsync();var entity = Lind.DDD.Utils.SerializeMemoryHelper.DeserializeFromJson<IEnumerable<TestApiModel>>(data);
}
//.......

} ?

上面代碼從請求上下文中拿到了這個大數據的字符串,然后通過反序列化得到了下面的結果:

?

當然,對于非常友好的webapi來說,你完全可以在方法參數上顯示的使用強類型,這種api框架會幫助我們進行序列化的操作,真的很友好!

這行list對象已經被架構進行了序列化操作

通過本篇文章,讓我們更清楚的認識到了POST請求的幾種方式,以及他們與服務端(api)如何去結合,對于java,.net平臺,這些方法都是同樣適用的!

來自:https://www.cnblogs.com/lori/p/5919306.html

轉載于:https://www.cnblogs.com/topguntopgun/p/10823767.html

總結

以上是生活随笔為你收集整理的HttpClient系列~StringContent与FormUrlEncodedContent的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。