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

C#使用HttpClient發(fā)起HTTP請求的完整指南

 更新時間:2025年11月06日 10:16:26   作者:拾荒的小海螺  
本文介紹了在.NET中使用HttpClient進(jìn)行RESTful API調(diào)用的方法,HttpClient是.NET中處理HTTP請求的核心類,支持多種HTTP方法、異步請求和JSON序列化,文章強(qiáng)調(diào)要重用HttpClient實例以避免端口耗盡問題,需要的朋友可以參考下

1、簡述

在現(xiàn)代應(yīng)用中,調(diào)用 RESTful API 已成為日常開發(fā)中不可或缺的一部分。無論你在開發(fā)桌面程序、Web 服務(wù)還是后臺任務(wù),HttpClient 都是 .NET 提供的官方網(wǎng)絡(luò)請求利器。

本文將帶你深入了解 HttpClient 的使用方式,并通過多個實踐樣例幫助你快速掌握它。

2、HttpClient 是什么?

HttpClient 是 .NET 中用于發(fā)送 HTTP 請求和接收響應(yīng)的核心類,屬于命名空間:

using System.Net.Http;

它支持:

  • GET / POST / PUT / DELETE 等 HTTP 方法
  • 異步請求(基于 async/await)
  • 自定義請求頭與內(nèi)容類型
  • 連接復(fù)用與超時控制
  • JSON 數(shù)據(jù)序列化與反序列化

創(chuàng)建 HttpClient 實例

最基礎(chǔ)的創(chuàng)建方式如下:

var client = new HttpClient();

但是要注意:

不要在每次請求時 new HttpClient()!
因為它會導(dǎo)致連接未及時釋放,引起端口耗盡問題。

正確的做法是:

  • 在應(yīng)用生命周期內(nèi) 重用 HttpClient 實例;
  • 或使用 HttpClientFactory(在 ASP.NET Core 中推薦)。

3、實踐樣例

下面我們從最常見的 GET 與 POST 請求 開始。

示例 1:GET 請求

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

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();

        var url = "https://api.github.com/repos/dotnet/runtime";
        // 設(shè)置 User-Agent,否則 GitHub API 會拒絕訪問
        client.DefaultRequestHeaders.Add("User-Agent", "CSharpHttpClientDemo");

        var response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode(); // 確保狀態(tài)碼 200-299

        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine("返回內(nèi)容:");
        Console.WriteLine(content);
    }
}

輸出為 JSON 格式的倉庫信息。

示例 2:POST 請求(發(fā)送 JSON 數(shù)據(jù))

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

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();

        var url = "https://httpbin.org/post";
        var data = new { Name = "Alice", Age = 25 };
        var json = JsonSerializer.Serialize(data);

        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var response = await client.PostAsync(url, content);

        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine("響應(yīng)內(nèi)容:");
        Console.WriteLine(result);
    }
}

該示例演示了如何:

  • 將 C# 對象序列化為 JSON;
  • 使用 StringContent 設(shè)置請求體;
  • 指定 Content-Typeapplication/json。

4、其他常用操作

1、設(shè)置請求頭

client.DefaultRequestHeaders.Add("Authorization", "Bearer your_token_here");
client.DefaultRequestHeaders.Add("Accept", "application/json");

2、PUT / DELETE 請求

// PUT 請求
var putContent = new StringContent("{\"name\":\"Bob\"}", Encoding.UTF8, "application/json");
var putResponse = await client.PutAsync("https://httpbin.org/put", putContent);

// DELETE 請求
var deleteResponse = await client.DeleteAsync("https://httpbin.org/delete");

3、超時與異常處理

client.Timeout = TimeSpan.FromSeconds(10);

try
{
    var response = await client.GetAsync("https://slowwly.robertomurray.co.uk/delay/5000/url/http://example.com");
    Console.WriteLine(await response.Content.ReadAsStringAsync());
}
catch (TaskCanceledException)
{
    Console.WriteLine("請求超時!");
}

4、反序列化 JSON 響應(yīng)

using System.Text.Json;

var jsonStr = await response.Content.ReadAsStringAsync();
var repoInfo = JsonSerializer.Deserialize<Repo>(jsonStr);

Console.WriteLine($"項目名稱:{repoInfo.name}");
Console.WriteLine($"Star 數(shù):{repoInfo.stargazers_count}");

class Repo
{
    public string name { get; set; }
    public int stargazers_count { get; set; }
}

5、天氣查詢程序 

這是一個實際的 API 調(diào)用案例,使用 Open-Meteo API 查詢天氣:

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

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();

        string url = "https://api.open-meteo.com/v1/forecast?latitude=35&longitude=139&current_weather=true";
        var response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode();

        var json = await response.Content.ReadAsStringAsync();
        var weather = JsonSerializer.Deserialize<WeatherResponse>(json);

        Console.WriteLine($"當(dāng)前溫度:{weather.current_weather.temperature} °C");
        Console.WriteLine($"風(fēng)速:{weather.current_weather.windspeed} km/h");
    }
}

class WeatherResponse
{
    public CurrentWeather current_weather { get; set; }
}

class CurrentWeather
{
    public double temperature { get; set; }
    public double windspeed { get; set; }
}

運行結(jié)果示例:

當(dāng)前溫度:21.3 °C
風(fēng)速:5.2 km/h

6、HttpClientFactory(進(jìn)階用法)

在 ASP.NET Core 中,推薦使用 IHttpClientFactory 管理 HttpClient 實例:

// Startup.cs
services.AddHttpClient("GitHub", client =>
{
    client.BaseAddress = new Uri("https://api.github.com/");
    client.DefaultRequestHeaders.Add("User-Agent", "MyApp");
});

使用時:

public class GitHubService
{
    private readonly HttpClient _client;

    public GitHubService(IHttpClientFactory factory)
    {
        _client = factory.CreateClient("GitHub");
    }

    public async Task<string> GetRepoAsync(string name)
    {
        var response = await _client.GetAsync($"repos/{name}");
        return await response.Content.ReadAsStringAsync();
    }
}

優(yōu)點:

  • 自動管理連接生命周期;
  • 支持命名客戶端;
  • 避免 Socket 耗盡;
  • 更易于測試與擴(kuò)展。
功能方法
GET 請求GetAsync()
POST 請求PostAsync()
PUT 請求PutAsync()
DELETE 請求DeleteAsync()
添加頭部DefaultRequestHeaders.Add()
設(shè)置超時client.Timeout
反序列化 JSONJsonSerializer.Deserialize<T>()

7、結(jié)語

通過本文你學(xué)到了:

  • 如何在 C# 中使用 HttpClient 發(fā)起各種 HTTP 請求;
  • 如何發(fā)送 JSON、處理響應(yīng)與異常;
  • 如何在實際項目中使用 HttpClientFactory 優(yōu)化性能。

建議:在生產(chǎn)環(huán)境中,始終重用 HttpClient 或使用 IHttpClientFactory,并注意請求超時與重試機(jī)制。

以上就是C#使用HttpClient發(fā)起HTTP請求的完整指南的詳細(xì)內(nèi)容,更多關(guān)于C# HttpClient發(fā)起HTTP請求的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中Equals和GetHashCode使用及區(qū)別

    C#中Equals和GetHashCode使用及區(qū)別

    這篇文章主要介紹了C#中Equals和GetHashCode使用及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • c# 圖片加密解密的實例代碼

    c# 圖片加密解密的實例代碼

    這篇文章介紹了c# 圖片加密解密的實例代碼,有需要的朋友可以參考一下
    2013-08-08
  • C#中判斷一個集合是否是另一個集合的子集的簡單方法

    C#中判斷一個集合是否是另一個集合的子集的簡單方法

    本文介紹利用C#中內(nèi)置的系統(tǒng)函數(shù)判斷一個集合是否是一個集合的子集的方法,此方法代碼量極少,分享給大家。
    2016-04-04
  • C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題

    C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題

    這篇文章主要介紹了C# DataTable.Select()根據(jù)條件篩選數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C#中將UTC時間轉(zhuǎn)換為JST時間的實現(xiàn)方法

    C#中將UTC時間轉(zhuǎn)換為JST時間的實現(xiàn)方法

    在C#中,將UTC時間轉(zhuǎn)換為JST(日本標(biāo)準(zhǔn)時間,即UTC+9)時間可以通過使用 DateTime 和 TimeZoneInfo 類來實現(xiàn),JST比UTC快9小時,因此可以直接進(jìn)行轉(zhuǎn)換,本文將通過代碼示例給大家介紹C#中將UTC時間轉(zhuǎn)換為JST時間,需要的朋友可以參考下
    2025-01-01
  • C#使用foreach語句遍歷二維數(shù)組的方法

    C#使用foreach語句遍歷二維數(shù)組的方法

    這篇文章主要介紹了C#使用foreach語句遍歷二維數(shù)組的方法,實例分析了C#遍歷數(shù)組的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C# 使用multipart form-data方式post數(shù)據(jù)到服務(wù)器

    C# 使用multipart form-data方式post數(shù)據(jù)到服務(wù)器

    這篇文章主要介紹了C# 使用multipart form-data方式post數(shù)據(jù)到服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • c#遞歸生成XML實例

    c#遞歸生成XML實例

    這篇文章主要介紹了c#遞歸生成XML的方法,以實例形式較為詳細(xì)的介紹了C#的遞歸算法與XML操作技巧,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • C#事件(event)使用方法詳解

    C#事件(event)使用方法詳解

    本文給大家介紹了在C#中,事件(event)的概念和使用方法,文章適合一些初學(xué)者學(xué)習(xí),主要講解了一些概念和一些代碼案例。
    2018-01-01
  • Unity調(diào)取移動端的麥克風(fēng)進(jìn)行錄音并播放

    Unity調(diào)取移動端的麥克風(fēng)進(jìn)行錄音并播放

    這篇文章主要為大家詳細(xì)介紹了Unity調(diào)取移動端的麥克風(fēng)進(jìn)行錄音并播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論

青阳县| 柳州市| 抚松县| 阳原县| 桐城市| 从江县| 碌曲县| 朝阳区| 嵊州市| 宝清县| 兴和县| 阿尔山市| 怀集县| 关岭| 江华| 清水县| 左贡县| 大关县| 北碚区| 色达县| 长沙市| 鸡西市| 石柱| 德阳市| 砀山县| 井陉县| 锦屏县| 杨浦区| 浦东新区| 宣武区| 广元市| 开鲁县| 玛多县| 彭州市| 临泉县| 玛沁县| 定南县| 五峰| 诸暨市| 阿克陶县| 沙洋县|