【前言】 幹了這麼多年C#,後悔沒早點用這種“分頁”,簡單/高效/易維護,比其它的分頁方式強多了,不信你自己看。 【正文】 支持.Net Core(2.0及以上)與.Net Framework(4.5及以上) 可以部署在Docker, Windows, Linux, Mac。 從NuGet引入Dev ...
【Github源碼】
《上一篇》 介紹了Xmtool工具庫中的XML操作類庫,今天我們繼續為大家介紹其中的HTTP請求類庫。
在現如今的軟體需求場景中,HTTP網路請求幾乎是開發過程中必然會使用的功能;而系統自帶的HTTPClient對象使用起來並不是那麼容易和友好,因此我們對其進行了二次封裝成了一個Web類庫。
該Web類庫提供了HTTP請求和HTTP安全相關兩方面的封裝。HTTP請求是基於系統自帶的HttpClient對象進行了二次封裝,提供了更易用的方法,並且對Json類型更加友好;HTTP安全方面主要針對XSS攻擊提供了字元處理方法,後續會根據需要不斷添加。
HTTP請求
使用HTTP請求,首選需要獲取HttpClientExt對象:
HttpClientExt client = Xmtool.Web.Client();
// 或者
HttpClientExt client = Xmtool.Web.Client("microservice-1");
根據獲取Client時傳入的參數不同,系統將返回不同的實例;但對相同的參數會做單例處理,也就是說相同的參數將獲取到同一個實例;當不傳入任何參數時,每次都會返回一個全新的實例。
根據HTTP常用請求場景類庫提供了各種屬性和方法:
AddRequestHeaderWithoutValidation方法
1. Timeout屬性
說明:用來設置或獲取HTTP請求的超時時間。
2. BaseAddress屬性
說明: 用來設置或獲取HTTP請求的基本地址,在後續使用相對地址發送請求時會使用該地址進行拼接。
3. AddDefaultHeader方法
public HttpClientExt AddDefaultHeader(string name, string value)
說明:為HTTP請求設置請求頭信息,該頭信息會在實例每次發起請求時攜帶。
參數:
name:請求頭名稱。
value:請求頭內容。
HttpClientExt client = Xmtool.Web.Client();
client.AddDefaultHeader("User", "admin");
4. AddRequestHeader方法
public HttpClientExt AddRequestHeader(string name, string value)
說明:為HTTP請求設置請求頭信息,該頭信息僅會在實例下一次發起請求時攜帶。
參數:
name:請求頭名稱。
value:請求頭內容。
5. AddRequestHeaderWithoutValidation方法
public HttpClientExt AddRequestHeaderWithoutValidation(string name, string value)
說明:為HTTP請求設置請求頭信息,該頭信息僅會在實例下一次發起請求時攜帶;該方法和AddRequestHeader的區別是不會對參數的合法性進行檢查。
參數:
name:請求頭名稱。
value:請求頭內容。
6. SetContent方法
public HttpClientExt SetContent(string content)
說明:為下一次HTTP請求(主要是提交類請求,如Post)設置提交內容。
參數:
content:請求提交內容。
HttpClientExt client = Xmtool.Web.Client();
client.SetContnent("Good Day");
// TODO
7. SetJsonContent方法
public HttpClientExt SetJsonContent(string content)
說明:為下一次請求設置提交內容,必須是JSON格式。
參數:
content:請求提交內容,JSON格式。
HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent("{\"Author\": \"softwaiter\"}");
// TODO
8. SetJsonContent方法二
public HttpClientExt SetJsonContent(DynamicObjectExt obj)
說明:通過動態對象為下一次請求設置JSON格式的提交內容。
參數:
obj:要提交的動態對象。
DynamicObjectExt obj = new DynamicObjectExt();
obj.Author = "softwaier";
HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent(obj);
// TODO
9. Clear方法
public HttpClientExt Clear()
說明:清除僅在下一次請求中生效的提交內容和請求頭信息。
10. Get方法
public HttpResponseExt Get(string requestUri)
說明:以Get方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Get("https://www.baidu.com");
// TODO
11. GetAsync方法
public async Task<HttpResponseExt> GetAsync(string requestUri)
說明:Get方法的非同步版本。
12. Post方法
public HttpResponseExt Post(string requestUri)
說明:以Post方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
// 新增一條人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"user\": \"admin", \"password\": \"Admin123\"}")
.Post("https://www.ceshi.com/person");
// TODO
13. PostAsync方法
public async Task<HttpResponseExt> PostAsync(string requestUri)
說明:Post方法的非同步版本。
14. Put方法
public HttpResponseExt Put(string requestUri)
說明:以Put方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
// 修改Id為1的人員住址
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"address\": \"BeiJing\"}")
.Put("https://www.ceshi.com/person/1");
// TODO
15. PutAsync方法
public async Task<HttpResponseExt> PutAsync(string requestUri)
說明:Put方法的非同步版本。
16. Delete方法
public HttpResponseExt Delete(string requestUri)
說明:以Delete方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
// 刪除Id為1的人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Delete("https://www.ceshi.com/person/1");
// TODO
17. DeleteAsync方法
public async Task<HttpResponseExt> DeleteAsync(string requestUri)
說明:Delete方法的非同步版本。
18. Patch方法
public HttpResponseExt Patch(string requestUri)
說明:以Patch方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
// 修改Id為1的人員信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"name\":\"wangxm\", \"age\": 18}")
.Delete("https://www.ceshi.com/person/1");
// TODO
19. PatchAsync方法
public async Task<HttpResponseExt> PatchAsync(string requestUri)
說明:Patch方法的非同步版本。
20. Head方法
public HttpResponseExt Head(string requestUri)
說明:以Head方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
21. HeadAsync方法
public async Task<HttpResponseExt> HeadAsync(string requestUri)
說明:Head方法的非同步版本。
22. Options方法
public HttpResponseExt Options(string requestUri)
說明:以Options方式發起一個HTTP請求。
參數:
requestUri:HTTP請求地址,可以是相對地址或絕對地址;如果是相對地址將使用BaseAddress進行拼接。
23. OptionsAsync方法
public async Task<HttpResponseExt> OptionsAsync(string requestUri)
說明:Options方法的非同步版本。
HTTP安全
HTTP安全在類庫中目前僅提供了一個應對XSS攻擊的處理方法,該方法會對傳入參數進行二次,將內容中有風險部分進行處理並返回。
使用時需要首先獲取HttpSecurity對象:
HttpSecurity security = Xmtool.Web.Security();
1. Xss方法
public string Xss(string str)
說明:對指定字元內容進行Xss風險處理並返回處理結果。
參數:
str:需要進行處理的字元串內容。
string str = "<script>alert(123);</script><div>hello world.</div>";
string str2 = Xmtool.Web.Security().Xss(str);
Console.Writeline(str2); // 輸出<div>hello world.</div>
//TODO
附加說明
一、DynamicObjectExt對象
說明:DynamicObjectExt動態對象是Xmtool工具庫中最具特色的一項功能;通過該對象可以無需事先定義就能像使用實體類一樣進行數據對象的賦值和操作;且比系統自帶的dynamic對象更加靈活友好。如果你熟悉Javascript的話,它就像Javascript中的變數一樣可以任意使用;更加詳細的說明請參考《DynamicObjectExt詳細說明》。
二、HttpResponseExt對象
HttpResponseExt對象用於接收HTTP請求返回結果,封裝了響應碼、響應頭、響應內容 3 部分內容。
1. StatusCode屬性
說明:HTTP請求的響應狀態碼。
2. Headers屬性
說明:HTTP請求的響應頭信息。
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.baidu.com");
if (resp.Headers.ContainsKey("user"))
{
string user = resp.Headers["user"];
// TODO
}
3. Content屬性
說明:HTTP請求的響應內容。
4. Json屬性
說明:HTTP請求返回的JSON格式的內容;如果返回內容不是合法的JSON格式,將返回異常。
// https://www.ceshi.com/person/1 請求返回內容
{
"Name": "softwaiter",
"Age": 18,
"Address": "BeiJing"
}
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.ceshi.com/person/1");
if (resp.Json.Name == "softwaiter")
{
// TODO
}