亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

完成OSS.Http底層HttpClient重構封裝 支持標準庫

2019-10-29 21:13:53
字體:
來源:轉載
供稿:網友

OSS.Http項目對于.Net Standard標準庫的支持已經遷移完畢,OSS開源系列兩個最底層的類庫已經具備跨運行時支持的能力。由于OSS.Http類庫是幾年前我參照RestSharp的思路,完成的一個輕量型Http請求框架。因為時間較久底層使用的還是HttpWebRequest,這次基本上是完全重構,這篇文章主要包含 1. HttpClient的介紹,2. 重構的思路, 3. 容易遇到的問題。

一. httpclient的基本介紹

HttpClient應該是在.net framework4.5版本左右引用的新功能,在此之前常用的是HttpWebRequest,相比較而言,前者更加的簡單清晰,最重要的是完全支持.net standard API,這也是我選擇它的重要原因。

HttpClient在結構上做了很大的調整,并且是完全異步的實現,可以說從底層上完成了異步的支持,這里先介紹對應的幾個主要類:

1.  HtttpRequestMessage

請求的基本信息,請求地址,請求動作等,此值是在HttpClient發起請求的方法中當參數傳入,與他對應的是響應 HttpResponseMessage

2.  HttpContent

請求的內容體,主要包含請求的具體內容,contenttype,contentlenght等,是HtttpRequestMessage的一個屬性,這兩個都包含Headers屬性,但是范圍分別不一樣,這個是很容易混淆出錯的地方,我給做了簡單分類:

HttpRequestMessage的頭部(HttpRequestHeaders )主要是請求的屬性,如Accept,UserAgent,AcceptEncoding等http鏈接的基本屬性。

HttpContent的頭部(HttpContentHeaders)主要是當前請求內容的屬性,主要有:Allow,Content-Encoding,Content-Length,Content-Type ,Expires ,Last-Modified 等,詳見官方類庫。

HttpContent 系統提供了幾個默認實現,主要如下幾個:

HttpClient,封裝

3.  HttpMessageHandler

此類主要作用是請求內容處理動作等的定義,如是否支持重定向,是否可以使用cookie,代理Proxy等,偏向于系統的設置,可以此值通過HttpClient構造函數傳入其中,系統默認的提供的子類為HttpClientHandler。

4.  HttpClient

具體的請求實現調用實現,完整實現了POST,GET,Delete等Http請求方法,所有的方法最終調用的是SendAsync方法。

上邊的四個主要類,構成了HttpClient請求的主要實現,如果你只是簡單的使用,那么只需要關心HttpClient即可,如下:

HttpClient,封裝

其實在它內部已經默認實現了HttpRequestMessage和HttpClientHandler的賦值。

雖然簡單介紹,但是基本上可以看出,HttpClient的實現做了非常明確的分工,不是再像以前所有的設置都集中在webrequest中。分工的明確最直接的優勢是HttpClient實現了多請求共用,參見博文

The default HttpClient is the simplest way in which you can start sending requests. A single HttpClient can be used to send as many HTTP requests as you want concurrently so in many scenarios you can just create one HttpClient and then use that for all your requests.

也就是當你系統中要發起不同的請求時,可以共用一個HttpClient,而不用像HttpWebReqest基本每次請求都需要重新定義一個對象,以減少資源的消耗。

二. 重構OSS.Http

  回到正題,重構我們的當前代碼模塊,如我所說,由于.Net Standard下完全不提供httpWebRequest的支持,直接導致了我做出重新實現的決定,因為以前httpWebRequest的簡陋,所以我基本上做了很大的封裝框架,上層完全不需要接觸具體的底層實現,基本上實現了RestSharp的核心,有興趣的同學可以參考代碼 OSS.Http 下Old分支。

  重構之前由于對HttpClient不是十分了解,本想延續已有框架流程,轉換實現。不過隨著對Client文檔的查看研究,發現很多封裝已經完全不需要,流程也發生了變化,所以刪除很多原來框架下的東西,重新整理出最終的實現。

  當然現在的HttpClient本身實現已經足夠簡單清晰,不過在很多情況下直接調用POST,GET等方法,會減少部分代碼的重用,像在OSS.Social項目中,底層我只需要實現一個RestCommon方法,即可達到全局請求控制,調用方只需要提供Url,HttpMothed,Parameter即可。

  這里我畫了一個簡單的流程圖作為呈現:

HttpClient,封裝

流程基本沒有太大的出入,代碼在Github,文件的結構如下:

  Mos文件下: Enum.cs  枚舉類,FileParameter.cs 文件參數類,FormParameter Form表單參數類 ,OsHttpRequest 請求參數類,

  OsRest.cs  是當前封裝類的主要實現,同時為了保證HttpClient本身功能通用,OsRest繼承自HttpClient,同時提供了RestSend方法,在這個方法中完成流程的實現并最終調用SendAsync方法執行請求。

  RestUtil.cs  輔助類,完成了全局OsRest(HttpClient)的共用,并定義了一個默認HttpClientHandler實現,正常直接調用這個類就可以了。

  流程中的執行用戶自定義設置,可以在OSHttpRequest中的RequestSet委托屬性中設置,例如可以設置訪問類型是json:

HttpClient,封裝

三.  容易遇到的問題

  雖然整個重構后的代碼已經不多了,但是應該還是有些問題可以給大家分享下

  1.  Header賦值問題,請參見我第一部分,一定要分清不同Headers,否則就可能給你報不正確的值錯誤

  2.  可以發現上邊的流程圖中有個“是否是Get”的判斷,因為如果是Get請求,Content是不能賦值的,就像在HttpWebReqest中,如果get請求調用了GetRequestStream方法,會有“無法發送具有此謂詞類型的內容正文”的異常錯誤。當然如果你使用的是OSS.Http作為請求,那么就沒有這個問題了。

  3.  和上傳文件同時上傳的表單參數,與單獨的表單參數提交,是不一樣的,請注意處理,不懂得參見OsRest類即可,已經做了處理。

如果你還有其他問題,或者對后續的更新感興趣,請關注公眾號(OSSCoder):

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线影院| 91国内揄拍国内精品对白| 欧美中文在线观看| 在线不卡国产精品| 亚洲精品永久免费| 97色在线播放视频| 色噜噜狠狠色综合网图区| 日本欧美黄网站| 亚洲一区精品电影| 国产自摸综合网| 久久久久国产视频| 伊人av综合网| 成人在线视频福利| 国产亚洲视频中文字幕视频| 欧美日韩在线视频一区| 伊人伊人伊人久久| 日韩欧美国产一区二区| 97热精品视频官网| 韩国三级电影久久久久久| 欧美激情亚洲激情| 欧美区二区三区| 久久精品视频网站| 精品久久久久久久久中文字幕| 精品国产区一区二区三区在线观看| 国产在线不卡精品| 国产视频精品在线| 久久久精品网站| 综合国产在线视频| 亚洲精品视频在线观看视频| zzijzzij亚洲日本成熟少妇| 亚洲免费视频网站| 国产精品精品视频一区二区三区| 成人黄色午夜影院| 国产亚洲欧美另类中文| 欧美在线观看一区二区三区| 91精品国产综合久久香蕉最新版| 91精品啪在线观看麻豆免费| 日韩视频精品在线| 在线观看精品国产视频| 亚洲97在线观看| 日韩69视频在线观看| 国产成人精品日本亚洲专区61| 色多多国产成人永久免费网站| 亚洲国产美女久久久久| 欧美日韩国产成人高清视频| 人体精品一二三区| 91精品国产高清自在线看超| 国产亚洲a∨片在线观看| 成人精品视频久久久久| 92看片淫黄大片欧美看国产片| 亚洲成人av片在线观看| 国产精品偷伦视频免费观看国产| 久久精品国产一区二区电影| 深夜精品寂寞黄网站在线观看| 狠狠躁夜夜躁人人爽超碰91| 亚洲国产精品国自产拍av秋霞| 91情侣偷在线精品国产| 国产精品久久久久久av福利软件| 日韩成人激情视频| 亚洲欧美国产精品专区久久| 久久不射电影网| 欧美精品免费看| 日本一区二区在线播放| 俺也去精品视频在线观看| 北条麻妃久久精品| 九九久久精品一区| 欧美老女人性视频| 国产一区二区在线播放| 久久天天躁狠狠躁夜夜av| 国产精品日日做人人爱| 日本久久亚洲电影| 欧美性高潮在线| 精品av在线播放| 国产精品99久久久久久www| 久久久精品2019中文字幕神马| 亚洲全黄一级网站| 岛国av一区二区三区| 国产精品日韩欧美综合| 国产精品久久久久久久av电影| 欧美超级免费视 在线| 一本久久综合亚洲鲁鲁| 日本三级韩国三级久久| 国产精品久久久久99| 欧美自拍视频在线| 欧美精品精品精品精品免费| 欧美精品在线播放| 久久99国产精品久久久久久久久| 久久999免费视频| 最近中文字幕mv在线一区二区三区四区| 亚洲高清免费观看高清完整版| 欧美成人一区在线| 久热在线中文字幕色999舞| 91免费综合在线| 亚洲精品美女在线| 日韩一区二区福利| 亚洲一区二区三区在线视频| 国产精品久久一区主播| 久久精品亚洲94久久精品| 91a在线视频| 久久久国产一区二区| 91精品国产自产91精品| 九九久久久久久久久激情| 欧美国产日韩一区二区在线观看| 久久在线观看视频| 亲子乱一区二区三区电影| 欧美大片欧美激情性色a∨久久| 91精品国产99久久久久久| 欧美福利小视频| 亚洲va男人天堂| 欧美国产日产韩国视频| 91国产精品电影| 福利视频一区二区| 国产精品日韩久久久久| 久久伊人免费视频| 久久久午夜视频| 26uuu国产精品视频| 国产免费一区二区三区在线能观看| 国产成人精品在线| 国产成人免费av电影| 精品久久在线播放| 麻豆国产精品va在线观看不卡| 亚洲精品中文字| 国产精品久久久久99| 久久免费国产视频| 日韩国产精品视频| 亚洲欧洲国产伦综合| 久久久精品一区二区| 亚洲欧美国产高清va在线播| 国产成人激情小视频| 成人福利在线观看| 亚洲色无码播放| 精品自拍视频在线观看| 亚洲最新av在线网站| 亚洲自拍在线观看| 亚洲综合日韩中文字幕v在线| www.亚洲免费视频| 国产精品狼人色视频一区| 国产精品视频永久免费播放| 亚洲精品黄网在线观看| 精品成人乱色一区二区| 日韩在线观看免费全集电视剧网站| 日韩精品中文字| 97视频在线观看成人| 色琪琪综合男人的天堂aⅴ视频| 欧美激情视频一区| 亚洲在线观看视频网站| 久久久亚洲精选| 国内精品国产三级国产在线专| 欧美第一黄网免费网站| 国产成人avxxxxx在线看| 亚洲精品一区二区三区婷婷月| 青青精品视频播放| 国产精品久久久91| 日韩av不卡在线| 久久精品久久久久| 亚洲欧美国产精品| 国产成人av网| 日韩小视频在线观看| 色婷婷综合久久久久| 亚洲黄页网在线观看| 国产91色在线免费| 奇米一区二区三区四区久久| 欧美成人精品三级在线观看| 国产日本欧美一区二区三区|