欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C#實現(xiàn)任意格式JSON文本的HTTP交互抽象類

 更新時間:2025年03月17日 08:41:09   作者:老胖閑聊  
為了實現(xiàn)一個支持任意格式JSON交互的抽象類,并且在整個過程中不需要對JSON格式數(shù)據(jù)進行序列化和反序列化操作,可以使用C#中的HttpClient類來進行HTTP請求和響應,本文給大家介紹了基于C#實現(xiàn)任意格式JSON文本的HTTP交互抽象類,需要的朋友可以參考下

引言

為了實現(xiàn)一個支持任意格式JSON交互的抽象類,并且在整個過程中不需要對JSON格式數(shù)據(jù)進行序列化和反序列化操作,可以使用C#中的HttpClient類來進行HTTP請求和響應。下面將創(chuàng)建一個抽象類JsonHttpClient,它封裝了HTTP請求和響應的邏輯,并且允許直接處理JSON字符串。

1. 創(chuàng)建抽象類 JsonHttpClient

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

public abstract class JsonHttpClient
{
    // HttpClient實例,用于發(fā)送HTTP請求
    private readonly HttpClient _httpClient;

    // 構造函數(shù),初始化HttpClient
    protected JsonHttpClient()
    {
        _httpClient = new HttpClient();
    }

    // 發(fā)送HTTP請求的抽象方法,子類必須實現(xiàn)
    protected abstract Task<HttpResponseMessage> SendRequestAsync(HttpRequestMessage request);

    // 發(fā)送HTTP GET請求
    public async Task<string> GetAsync(string uri)
    {
        // 創(chuàng)建HTTP GET請求
        var request = new HttpRequestMessage(HttpMethod.Get, uri);

        // 發(fā)送請求并獲取響應
        var response = await SendRequestAsync(request);

        // 確保響應成功
        response.EnsureSuccessStatusCode();

        // 讀取響應內容并返回
        return await response.Content.ReadAsStringAsync();
    }

    // 發(fā)送HTTP POST請求
    public async Task<string> PostAsync(string uri, string jsonContent)
    {
        // 創(chuàng)建HTTP POST請求
        var request = new HttpRequestMessage(HttpMethod.Post, uri)
        {
            Content = new StringContent(jsonContent, Encoding.UTF8, "application/json")
        };

        // 發(fā)送請求并獲取響應
        var response = await SendRequestAsync(request);

        // 確保響應成功
        response.EnsureSuccessStatusCode();

        // 讀取響應內容并返回
        return await response.Content.ReadAsStringAsync();
    }

    // 發(fā)送HTTP PUT請求
    public async Task<string> PutAsync(string uri, string jsonContent)
    {
        // 創(chuàng)建HTTP PUT請求
        var request = new HttpRequestMessage(HttpMethod.Put, uri)
        {
            Content = new StringContent(jsonContent, Encoding.UTF8, "application/json")
        };

        // 發(fā)送請求并獲取響應
        var response = await SendRequestAsync(request);

        // 確保響應成功
        response.EnsureSuccessStatusCode();

        // 讀取響應內容并返回
        return await response.Content.ReadAsStringAsync();
    }

    // 發(fā)送HTTP DELETE請求
    public async Task<string> DeleteAsync(string uri)
    {
        // 創(chuàng)建HTTP DELETE請求
        var request = new HttpRequestMessage(HttpMethod.Delete, uri);

        // 發(fā)送請求并獲取響應
        var response = await SendRequestAsync(request);

        // 確保響應成功
        response.EnsureSuccessStatusCode();

        // 讀取響應內容并返回
        return await response.Content.ReadAsStringAsync();
    }
}

2. 實現(xiàn)具體的HTTP客戶端類

可以創(chuàng)建一個具體的HTTP客戶端類,繼承自JsonHttpClient,并實現(xiàn)SendRequestAsync方法。

public class MyHttpClient : JsonHttpClient
{
    // 實現(xiàn)SendRequestAsync方法
    protected override async Task<HttpResponseMessage> SendRequestAsync(HttpRequestMessage request)
    {
        // 使用HttpClient發(fā)送請求并返回響應
        return await _httpClient.SendAsync(request);
    }
}

3. 使用案例

下面是一個從發(fā)送HTTP請求到獲取響應并顯示在控制臺的完整案例。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // 創(chuàng)建MyHttpClient實例
        var httpClient = new MyHttpClient();

        // 定義API的URL
        string apiUrl = "https://jsonplaceholder.typicode.com/posts";

        try
        {
            // 發(fā)送HTTP GET請求
            string response = await httpClient.GetAsync(apiUrl);

            // 將響應內容顯示在控制臺
            Console.WriteLine("Response from GET request:");
            Console.WriteLine(response);

            // 發(fā)送HTTP POST請求
            string postData = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";
            string postResponse = await httpClient.PostAsync(apiUrl, postData);

            // 將響應內容顯示在控制臺
            Console.WriteLine("Response from POST request:");
            Console.WriteLine(postResponse);
        }
        catch (HttpRequestException e)
        {
            // 處理HTTP請求異常
            Console.WriteLine("HTTP Request Error: " + e.Message);
        }
        catch (Exception e)
        {
            // 處理其他異常
            Console.WriteLine("Error: " + e.Message);
        }
    }
}

4. 代碼注解

  • HttpClientHttpClient是C#中用于發(fā)送HTTP請求和接收HTTP響應的類。它是線程安全的,建議在應用程序中重用同一個HttpClient實例。

  • HttpRequestMessage: 表示一個HTTP請求消息,包含請求方法(GET、POST等)、請求URI、請求頭、請求內容等信息。

  • HttpResponseMessage: 表示一個HTTP響應消息,包含響應狀態(tài)碼、響應頭、響應內容等信息。

  • StringContent: 用于將字符串內容作為HTTP請求的內容發(fā)送。我們可以指定內容的編碼和媒體類型(如application/json)。

  • EnsureSuccessStatusCode: 確保HTTP響應的狀態(tài)碼表示成功(2xx),否則拋出HttpRequestException異常。

  • ReadAsStringAsync: 異步讀取HTTP響應的內容并返回為字符串。

5. 運行結果

當運行這個程序時,它會發(fā)送一個GET請求和一個POST請求到https://jsonplaceholder.typicode.com/posts,并將響應內容打印到控制臺。GET請求會返回所有的帖子,而POST請求會創(chuàng)建一個新的帖子并返回創(chuàng)建的結果。

6. 總結

通過這個抽象類JsonHttpClient,可以輕松地發(fā)送HTTP請求并處理響應,而不需要對JSON數(shù)據(jù)進行序列化和反序列化操作。這種方法適用于需要直接處理JSON字符串的場景,例如與某些API進行交互時。

以上就是基于C#實現(xiàn)任意格式JSON文本的HTTP交互抽象類的詳細內容,更多關于C# JSON的HTTP交互抽象類的資料請關注腳本之家其它相關文章!

相關文章

  • C#簡單寫入xml文件的方法

    C#簡單寫入xml文件的方法

    這篇文章主要介紹了C#簡單寫入xml文件的方法,可實現(xiàn)C#針對XML文件簡單寫入的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#通過Win32API設置客戶端系統(tǒng)時間的方法詳解

    C#通過Win32API設置客戶端系統(tǒng)時間的方法詳解

    在日常工作中,有時可能會需要獲取或修改客戶端電腦的系統(tǒng)時間,比如軟件設置了Licence有效期,本文以一個簡單的小例子,簡述如何通過C#獲取和設置客戶端電腦的系統(tǒng)時間,僅供學習分享使用,如有不足之處,還請指正,需要的朋友可以參考下
    2024-06-06
  • C#使用SqlConnection連接到SQL Server的代碼示例

    C#使用SqlConnection連接到SQL Server的代碼示例

    這篇文章主要介紹了C#使用SqlConnection連接到SQL Server的代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • C#微信分享代碼

    C#微信分享代碼

    這篇文章主要為大家詳細介紹了C#微信分享的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲功能

    unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲功能

    workerman?是一款開源高性能?PHP?應用容器,他除了用于互聯(lián)網(wǎng)、即時通訊、APP?開發(fā)、硬件通訊、智能家居、物聯(lián)網(wǎng)等領域的開發(fā)外,這篇文章主要介紹了unity3d?對接?workerman?實現(xiàn)聯(lián)機游戲,需要的朋友可以參考下
    2022-10-10
  • C#多線程學習之(五)使用定時器進行多線程的自動管理

    C#多線程學習之(五)使用定時器進行多線程的自動管理

    這篇文章主要介紹了C#多線程學習之使用定時器進行多線程的自動管理,實例分析了C#使用timer定時器類實現(xiàn)針對多線程的自動管理功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 基于C#編寫一個接受圖片流的OCR識別接口

    基于C#編寫一個接受圖片流的OCR識別接口

    這篇文章主要為大家詳細介紹了如何使用C#寫一個接受圖片流的OCR識別接口,以及測試用例調用接口,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • C#自定義音樂播放器進度條

    C#自定義音樂播放器進度條

    這篇文章主要為大家詳細介紹了C#自定義音樂播放器進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 深入學習C#網(wǎng)絡編程之HTTP應用編程(下)

    深入學習C#網(wǎng)絡編程之HTTP應用編程(下)

    這篇文章主要介紹了深入學習C#網(wǎng)絡編程之HTTP應用編程的相關知識,文中講解的非常詳細,幫助大家更好的學習c#網(wǎng)絡編程,感興趣的朋友可以了解下
    2020-06-06
  • C#使用yield關鍵字讓自定義集合實現(xiàn)foreach遍歷的方法

    C#使用yield關鍵字讓自定義集合實現(xiàn)foreach遍歷的方法

    這篇文章主要介紹了C#使用yield關鍵字讓自定義集合實現(xiàn)foreach遍歷的方法,需要的朋友可以參考下
    2014-08-08

最新評論