.net core基於HttpClient實現的網路請求庫

来源:https://www.cnblogs.com/donpangpang/archive/2023/04/01/17279574.html
-Advertisement-
Play Games

Soda.Http 基於HttpClient封裝的 Http 請求庫。如果有什麼好想法,可以提 Issue 或者 Pr。,如果想要使用,直接在nuget搜索Soda.Http即可。 Github項目地址:Soda.Http 用法 1 預載 預載配置並不是必須的,但是有助於我們進行一些通用基礎設置,例 ...


Soda.Http

基於HttpClient封裝的 Http 請求庫。如果有什麼好想法,可以提 Issue 或者 Pr。,如果想要使用,直接在nuget搜索Soda.Http即可。

Github項目地址:Soda.Http

用法

1 預載

預載配置並不是必須的,但是有助於我們進行一些通用基礎設置,例如Headers、Accept、BaseUrl等等。

配置BaseUrl之後,可以直接使用QSodaHttp.Uri()代替QSodaHttp.Url(),直接填寫介面即可。

AspNetCore中:

services.AddSodaHttp(opts =>
{
    opts.BaseUrl = "http://localhost:8080/";
    opts.Accept = new[]
    {
        "application/json",
        "text/plain",
        "*/*"
    };
    opts.EnableCompress = false;
    opts.Headers = new[]{
        ("X-Ca-Test", "key")
    };
});

較為通用的寫法,程式構建時:

QSodaHttp.AddSodaHttp(opts =>
{
    opts.BaseUrl = "http://localhost:8080/";
    opts.Accept = new[]
    {
        "application/json",
        "text/plain",
        "*/*"
    };
    opts.EnableCompress = false;
    opts.Headers = new[]{
        ("X-Ca-Test", "key")
    };
})

2 全局配置 Authentication

有時需要全局配置 Authentication,如果在代碼中請求中獨立配置了 Authentication 則會覆蓋全局 Authentication

QSodaHttp.InitAuthentication("Bearer", "Values");

如果你是塞到 Header 里的這種做法

QSodaHttp.AddHeader("X-Ca-Key", "Values");

3 Http 請求

3.1 QSodaHttp

API 示例:

var result = await QSodaHttp.Url("https://www.baidu.com/")
    .Header("X-Ca-Key", "XXX")
    .Authentication("Bearer", "XXX")
    .Params(new { Id = "123456" })
    .Body(new { })
    // .Form(...)
    // .File(...)
    .PostAsync<string>();

簡單示例:

// 配置BaseUrl
var services = new ServiceCollection();
services.AddSodaHttp(opts =>
{
    opts.EnableCompress = false;
    opts.BaseUrl = "http://localhost:5050/";
});
var res = await QSodaHttp.Uri("/Test/Get").Params(new { Id = "123456" }).GetAsync<object>();
var res = await QSodaHttp.Uri("/Test/TestGetResult").Params(new { Id = "123456", Ids = new[] { "123", "456" } }).GetAsync<object>();
var res = await QSodaHttp.Uri("/Test/Post").Body(new { Id = "123456", Ids = new[] { "123", "456" } }).PostAsync<object>();
var res = await QSodaHttp.Uri("/Test/PostResult")
        .Params(new { Id = "123456", Ids = new[] { "123", "456" } })
        .Body(new { Id = "123456", Ids = new[] { "123", "456" } })
        .PostAsync<object>();
var res = await QSodaHttp.Uri("/Test/Delete").Params(new { Id = "123456" }).DeleteAsync<object>();
var res = await QSodaHttp.Uri("/Test/DeleteResult").Params(new { Id = "123456", Ids = new[] { "123", "456" } }).DeleteAsync<object>();
var res = await QSodaHttp.Uri("/Test/Put").Params(new { Id = "123456" }).PutAsync<object>();
var res = await QSodaHttp.Uri("/Test/PutResult")
        .Body(new { Id = "123456", Ids = new[] { "123", "456" } })
        .PutAsync<object>();
var res = await QSodaHttp.Uri("Patch").Params(new { Id = "123456" }).PatchAsync<object>();
var res = await QSodaHttp.Uri("PatchResult")
        .Body(new { Id = "123456", Ids = new[] { "123", "456" } })
        .PatchAsync<object>();

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #案例一 列印排序好的數據 #列表方式 lst_name=['林黛玉','薛寶釵','賈元春','賈探春','史湘雲'] lst_sign=['①','②','③','④','⑤'] for i in range(5): print(lst_sign[i],lst_name[i]) print(' ...
  • 7.1 潰壩 官網 目錄:$FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak 7.1.1 介紹 本案例使用interFoam兩相演算法,基於流體體積分數(VOF)法,每個網格中的相體積分數(alpha)通過求解一個組分運輸方程確定。物理屬性基於這 ...
  • 1、MySQL 中有哪幾種鎖? (1)表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最 高,併發度最低。 (2)行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最 低,併發度也最高。 (3)頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表 鎖 ...
  • 原創:扣釘日記(微信公眾號ID:codelogs),歡迎分享,非公眾號轉載保留此聲明。 上個月,我們一個java服務上線後,偶爾會發生記憶體OOM(Out Of Memory)問題,但由於OOM導致服務不響應請求,健康檢查多次不通過,最後部署平臺kill了java進程,這導致定位這次OOM問題也變得困 ...
  • JavaSE:註解與反射(Annotation & Reflection) ​ 註解和框架是所有框架的底層,如Mybatis,spring。框架的底層實現機制就是註解和反射。註解相比於註釋,除了能較為直接的表示出這部分模塊的功能,也能實現一定的具體功能。 01 初識註解 1.1 什麼是註解 Anno ...
  • 多線程指的是在一個程式中同時運行多個線程,這些線程可以獨立運行或者相互協作,從而完成更加複雜的任務。Java中的多線程可以使用synchronized關鍵字來實現線程同步,避免多個線程同時訪問共用資源而導致的數據錯誤。此外,Java中還提供了Lock、Condition、Semaphore等類和介面... ...
  • 最近鴿了挺久的,因為最近要做課設,再加上被這個工程的調試給難到了。 在做該工程的時候,有一個良好的項目管理習慣會讓開發的時候不會讓人那麼的高血壓。 特別要註意的是,非同步FIFO的讀寫時鐘的速率匹配問題,這個問題卡了我好久。 1、sobel運算元 Sobel 演算法是像素圖像邊緣檢測中最重要的運算元之一,在 ...
  • 查看鏡像 conda config --show channels 刪除鏡像 conda config --remove channels 源名稱或鏈接 恢復預設鏡像 conda config --remove-key channels 添加鏡像 清華鏡像更新了 conda config --add ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...