一個技術汪的開源夢 —— 基於 .Net Core 的公共組件之 Http 請求客戶端

来源:http://www.cnblogs.com/wlitsoft/archive/2016/11/12/6035957.html
-Advertisement-
Play Games

一個技術汪的開源夢 —— 目錄 想必大家在項目開發的時候應該都在程式中調用過自己內部的介面或者使用過第三方提供的介面,咱今天不討論 REST ,最常用的請求應該就是 GET 和 POST 了,那下麵開始講解對於 Http 請求客戶端的簡單封裝。 首先,說一個好消息 就是 .Net Core 已將之前 ...


一個技術汪的開源夢 —— 目錄

      想必大家在項目開發的時候應該都在程式中調用過自己內部的介面或者使用過第三方提供的介面,咱今天不討論 REST ,最常用的請求應該就是 GET 和 POST 了,那下麵開始講解對於 Http 請求客戶端的簡單封裝。

     首先,說一個好消息 就是 .Net Core 已將之前的 System.Net.Http 組件預設添加到了 NETStandard.Library 庫中,所以直接用就好了,不需要再額外在 Nuget 上安裝了,說道 Nuget 後續計劃會有一篇文章介紹 Nuget 包的生成以及上傳發佈的文章,近期會整理髮布。

該 Http 請求客戶端取名 HttpReqeustClient 內部暫時使用 HttpClient (既 System.Net.Http 組件中的),暫時實現以下功能。

  • 根據 url 發送 GET 請求獲取響應的文本;
  • 根據 url 發送 GET 請求獲取響應的二進位數組;(用於文件下載場景)
  • 根據 url 發送 POST 請求獲取響應的文本。
    • Dictionary<string, string> postData 參數;
    • HttpPostDataDictionary postData 參數。(可以指定普通文本類型和文件類型)
    • 後續做微信SDK時會添加 Object 參數,直接序列化成 JSON 字元串提交;
  • 添加 Http 請求頭、添加請求 Cookies 、添加請求所使用的證書等。

HttpPostDataType  Http 提交數據類型類,用於指定提交的數據是 文本 還是 文件。

 1 namespace Wlitsoft.Framework.Common.Net
 2 {
 3     /// <summary>
 4     /// Http 提交數據類型。
 5     /// </summary>
 6     public enum HttpPostDataType
 7     {
 8         /// <summary>
 9         /// 文本。
10         /// </summary>
11         Text,
12 
13         /// <summary>
14         /// 文件路徑。
15         /// </summary>
16         FilePath,
17 
18         /// <summary>
19         /// 文件流。
20         /// </summary>
21         FileStream
22     }
23 }
View Code

HttpPostDataDictionary Http 提交數據字典,要提交的數據字典該字典會包括普通文本或文件類型等數據。

 1 using System.Collections.Generic;
 2 using System.IO;
 3 using System.Net.Http;
 4 using Wlitsoft.Framework.Common.Exception;
 5 
 6 namespace Wlitsoft.Framework.Common.Net
 7 {
 8     /// <summary>
 9     /// Http 提交數據字典。
10     /// </summary>
11     public class HttpPostDataDictionary : Dictionary<string, KeyValuePair<HttpPostDataType,object>>
12     {
13 
14         /// <summary>
15         /// 添加文本數據。
16         /// </summary>
17         /// <param name="name">HTTP 內容的名稱。</param>
18         /// <param name="value">文本值。</param>
19         public void AddText(string name, string value)
20         {
21             #region 參數校驗
22 
23             if (string.IsNullOrEmpty(name))
24                 throw new StringNullOrEmptyException(nameof(name));
25 
26             if (string.IsNullOrEmpty(value))
27                 throw new StringNullOrEmptyException(nameof(value));
28 
29             #endregion
30 
31             this.Add(name, new KeyValuePair<HttpPostDataType, object>(HttpPostDataType.Text, value));
32         }
33 
34         /// <summary>
35         /// 添加文件數據。
36         /// </summary>
37         /// <param name="name">HTTP 內容的名稱。</param>
38         /// <param name="filePath">文件路徑。</param>
39         public void AddFile(string name, string filePath)
40         {
41             #region 參數校驗
42 
43             if (string.IsNullOrEmpty(name))
44                 throw new StringNullOrEmptyException(nameof(name));
45 
46             if (string.IsNullOrEmpty(filePath))
47                 throw new StringNullOrEmptyException(nameof(filePath));
48 
49             #endregion
50 
51             throw new System.NotImplementedException();
52         }
53 
54         /// <summary>
55         /// 添加文件流。
56         /// </summary>
57         /// <param name="name">HTTP 內容的名稱。</param>
58         /// <param name="fileStream">文件流。</param>
59         public void AddFile(string name, FileStream fileStream)
60         {
61             #region 參數校驗
62 
63             if (string.IsNullOrEmpty(name))
64                 throw new StringNullOrEmptyException(nameof(name));
65 
66             if (fileStream == null)
67                 throw new ObjectNullException(nameof(fileStream));
68 
69             #endregion
70 
71             this.Add(name, new KeyValuePair<HttpPostDataType, object>(HttpPostDataType.FileStream, fileStream));
72         }
73     }
74 }
View Code

裡面提供有添加文本、添加文件等公共方法。

好了,最主要的 HttpReqeustClient 類提供一下

公共屬性

/// <summary>
/// 獲取當前請求使用的 <see cref="HttpClient"/> 實例。
/// </summary>
public HttpClient HttpClient { get; private set; }

/// <summary>
/// 獲取包含狀態碼和數據的 HTTP 相應消息。
/// </summary>
public HttpResponseMessage HttpResponseMessage { get; private set; }

/// <summary>
/// 獲取Http請求頭集合。
/// </summary>
public Dictionary<string, string> Headers { get; }

/// <summary>
/// 獲取或設置Cookie集合容器。
/// </summary>
public CookieContainer CookieContainer { get; set; }

/// <summary>
/// 獲取或設置要使用的安全證書。
/// </summary>
public X509Certificate Certificate { get; set; }

方法簽名

/// <summary>
/// 根據 <paramref name="url"/> 發送 GET 請求獲取響應的文本。
/// </summary>
/// <param name="url">要請求的 url 地址。</param>
/// <returns>伺服器響應的文本。</returns>
public string HttpGetString(string url)

/// <summary>
/// 根據 <paramref name="url"/> 發送 GET 請求獲取響應的二進位數組。
/// </summary>
/// <param name="url">要請求的 url 地址。</param>
/// <returns>伺服器響應的二進位數組。</returns>
public byte[] HttpGetBytes(string url)

/// <summary>
/// 根據 <paramref name="url"/> 發送 POST 請求獲取響應的文本。
/// </summary>
/// <param name="url">要請求的 url 地址。</param>
/// <param name="postData">要發送的數據。</param>
/// <returns>伺服器響應的文本。</returns>
public string HttpPost(string url, Dictionary<string, string> postData)

/// <summary>
/// 根據 <paramref name="url"/> 發送 POST 請求獲取響應的文本。
/// </summary>
/// <param name="url">要請求的 url 地址。</param>
/// <param name="postData">要發送的數據。</param>
/// <returns>伺服器響應的文本。</returns>
public string HttpPost(string url, HttpPostDataDictionary postData)

/// <summary>
/// 根據 <paramref name="url"/> 發送 POST 請求獲取響應的文本。
/// </summary>
/// <param name="url">要請求的 url 地址。</param>
/// <param name="httpContent">HTTP 實體正文對象。</param>
/// <returns>伺服器響應的文本。</returns>
public string HttpPost(string url, HttpContent httpContent)

 

一個技術汪的開源夢 —— 目錄

未完待續。

下篇預告:一個技術汪的開源夢 —— 基於 .Net Core 的公共組件之字元串加密 & Http 請求參數簽名


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

-Advertisement-
Play Games
更多相關文章
  • CentOS下安裝FTP伺服器: 第一步,檢查伺服器端是否已經安裝FTP:[root@localhost centos]# rpm -q vsftpd 如果出現的是:[root@localhost centos]# package vsftpd is not installed ,說明vsftpd沒 ...
  • 1.IOS中XML文件獲取 //設置遠程訪問地址 NSURL *url=[NSURL URLWithString:@""]; //創建動態URL請求,並初始化 NSMutableURLRequest * request=[[NSMutableURLRequest alloc]initWithURL: ...
  • 1、安裝MySql服務端命令: yum install mysql-server yum install mysql-devel 2、安裝MySql客戶端 yum install mysql 3、啟動服務 service mysqld start或者/etc/init.d/mysqld start ...
  • XML文件有2種解析方式 1.基於文檔(document) 2.基於事件(sax) 1.IOS中XML文件獲取 首先要將XML導入工程中 在ViewController的按鈕事件中,代碼如下: //獲取xml完整路徑 NSString * path=[[NSBundle mainBundle] pa ...
  • 圖1. STM32F10xxx標準外設庫體繫結構先說這個問題,大家都知道,我們在選擇使用哪些外圍的的時候,是去更改從官方模版中拷貝過來的stm32f10x_conf.h文件的27-48行,把我們要用的外圍的頭文件包含進來,不用的外圍的頭文件註釋掉,但是你是否發現我們根本沒有在用戶主程式文件中包含st ...
  • 安裝vim 命令 一般模式 shift 4 行尾 shift 6 或 0行首 gg 頂部 G 下部 複製 yy 剪切幾行 數字 dd p粘貼 /和? 查找 1,100s/iptable/ip/g 第一行到100行 把iptable替換成ip g全局 1,$s/iptable/ip/g 全部選擇 %s ...
  • Git是目前世界上最先進的分散式版本控制系統(沒有之一)。使用Svn的請參考《版本控制-svn伺服器搭建和常用命令(centos 6.3)》,下麵介紹Git的常用命令 常用命令 簡單版 升級版 其他 伺服器搭建 本地伺服器搭建 Gitolite搭建 一、簡單版 1、創建版本庫 2、新增修改,新增文件 ...
  • 寫在前面的話 1.LAMP環境搭建請查看這篇日誌:http://www.cnblogs.com/yichong/p/6038686.html 2.這隻是一篇簡單的Discuz安裝教程,深入內容以後會講到。 3.Discu-3.2下載路徑:http://download.comsenz.com/Dis ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...