最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

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

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

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

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

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

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

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

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

        // 讀取響應(yīng)內(nèi)容并返回
        return await response.Content.ReadAsStringAsync();
    }

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

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

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

        // 讀取響應(yīng)內(nèi)容并返回
        return await response.Content.ReadAsStringAsync();
    }

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

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

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

        // 讀取響應(yīng)內(nèi)容并返回
        return await response.Content.ReadAsStringAsync();
    }

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

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

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

        // 讀取響應(yīng)內(nèi)容并返回
        return await response.Content.ReadAsStringAsync();
    }
}

2. 實(shí)現(xiàn)具體的HTTP客戶(hù)端類(lèi)

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

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

3. 使用案例

下面是一個(gè)從發(fā)送HTTP請(qǐng)求到獲取響應(yīng)并顯示在控制臺(tái)的完整案例。

using System;
using System.Threading.Tasks;

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

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

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

            // 將響應(yīng)內(nèi)容顯示在控制臺(tái)
            Console.WriteLine("Response from GET request:");
            Console.WriteLine(response);

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

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

4. 代碼注解

  • HttpClientHttpClient是C#中用于發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)的類(lèi)。它是線程安全的,建議在應(yīng)用程序中重用同一個(gè)HttpClient實(shí)例。

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

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

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

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

  • ReadAsStringAsync: 異步讀取HTTP響應(yīng)的內(nèi)容并返回為字符串。

5. 運(yùn)行結(jié)果

當(dāng)運(yùn)行這個(gè)程序時(shí),它會(huì)發(fā)送一個(gè)GET請(qǐng)求和一個(gè)POST請(qǐng)求到https://jsonplaceholder.typicode.com/posts,并將響應(yīng)內(nèi)容打印到控制臺(tái)。GET請(qǐng)求會(huì)返回所有的帖子,而POST請(qǐng)求會(huì)創(chuàng)建一個(gè)新的帖子并返回創(chuàng)建的結(jié)果。

6. 總結(jié)

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

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

相關(guān)文章

最新評(píng)論

靖江市| 买车| 库车县| 察隅县| 额尔古纳市| 东至县| 安阳市| 鹤山市| 万年县| 增城市| 石台县| 原平市| 花莲县| 通渭县| 临高县| 钟祥市| 庐江县| 凤台县| 交口县| 石城县| 津南区| 九龙坡区| 正安县| 济南市| 洛浦县| 辉县市| 西藏| 大足县| 昌黎县| 金川县| 沁源县| 阳东县| 岚皋县| 济阳县| 宜都市| 金川县| 获嘉县| 东平县| 天全县| 根河市| 嘉禾县|