OSS.Http專案對於.Net Standard標準函式庫的支援已經遷移完畢,OSS開源系列兩個最底層的類別庫已經具備跨執行時間支援的能力。本篇文章主要包含 1. HttpClient的介紹,2. 重構的思路, 3. 容易遇到的問題。具有很好的參考價值,下面跟著小編一起來看下吧
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 系統提供了幾個預設實現,主要如下幾個:3. HttpMessageHandler
#此類主要作用是請求內容處理動作等的定義,如是否支援重定向,是否可以使用cookie,代理Proxy等,偏向系統的設置,可以此值透過HttpClient建構函數傳入其中,系統預設的提供的子類別為HttpClientHandler。4. HttpClient
#特定的請求實作呼叫實現,完整實作了POST,GET,Delete等Http請求方法,所有的方法最終調用的是SendAsync方法。 上邊的四個主要類,構成了HttpClient請求的主要實現,如果你只是簡單的使用,那麼只需要關心HttpClient即可,如下:
二. 重構OSS.Http
回到正題,重構我們的當前程式碼模組,如我所說,由於.Net Standard下完全不提供httpWebRequest的支持,直接導致了我做出重新實現的決定,因為以前httpWebRequest的簡陋,所以我基本上做了很大的封裝框架,上層完全不需要接觸具體的底層實現,基本上實現了RestSharp的核心,有興趣的同學可以參考代碼OSS.Http 下Old分支。 重構之前由於對HttpClient不是十分了解,本想延續已有框架流程,轉換實作。不過隨著Client文件的檢視研究,發現很多封裝已經完全不需要,流程也發生了變化,所以刪除很多原來框架下的東西,重新整理出最終的實作。當然現在的HttpClient本身實作已經夠簡單清晰,不過在很多情況下直接呼叫POST,GET等方法,會減少部分程式碼的重用,像在OSS.Social專案中,底層我只需要實作一個RestCommon方法,即可達到全域請求控制,呼叫方只需要提供Url,HttpMothed,Parameter即可。
這裡我畫了一個簡單的流程圖作為呈現:
流程基本上沒有太大的出入,程式碼在Github,檔案的架構如下:
Mos檔案下: Enum.cs 枚舉類,FileParameter.cs 檔案參數類,FormParameter Form表單參數類,OsHttpRequest 請求參數類,
OsRest.cs 是目前封裝類別的主要實現,同時為了確保HttpClient本身功能通用,OsRest繼承自HttpClient,同時提供了RestSend方法,在這個方法中完成流程的實作並最終呼叫SendAsync方法執行請求。
RestUtil.cs 輔助類,完成了全域OsRest(HttpClient)的共用,並定義了一個預設HttpClientHandler實現,正常直接呼叫這個類別就可以了。
流程中的執行使用者自訂設置,可以在OSHttpRequest中的RequestSet委託屬性中設置,例如可以設定存取類型是json:
三. 容易遇到的問題
雖然整個重構後的程式碼已經不多了,但是應該還是有些問題可以給大家分享下
1. Header賦值問題,請參考我第一部分,一定要分辨不同Headers,否則就可能給你報不正確的值錯誤
2 . 可以發現上邊的流程圖中有個「是否是Get」的判斷,因為如果是Get請求,Content是不能賦值的,就像在HttpWebReqest中,如果get請求呼叫了GetRequestStream方法,會有「無法發送具有此謂詞類型的內容正文」的異常錯誤。當然如果你使用的是OSS.Http作為請求,那就沒有這個問題了。
3. 和上傳檔案同時上傳的表單參數,與單獨的表單參數提交,是不一樣的,請注意處理,不懂得參見OsRest類即可,已經做了處理。
以上就是完成OSS.Http底層HttpClient重構封裝 支援標準函式庫的詳細介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境