国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.NET Core HttpClient請求異常分析

這篇具有很好參考價值的文章主要介紹了.NET Core HttpClient請求異常分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

推送邏輯是在類庫中使用HttpClient,所以沒有使用HttpClientFactory,因此定義靜態(tài)變量來使用HttpClient,而非每一個請求就實例化一個HttpClient,

接下來我們來詳細(xì)分析項目示例代碼并對其進行改進

static class Program
{
    static HttpClient httpClient = CreateHttpClient();
    static Program()
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        ServicePointManager.ServerCertificateValidationCallback = (message, cert, chain, error) => true,
    }

    static async Task Main(string[] args)
    {
        await httpClient.PostAsync("", new StringContent(""));
    }

    static HttpClient CreateHttpClient()
    {
        var client = new HttpClient(new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true
        })
        {
            Timeout = TimeSpan.FromSeconds(30)
        };

        client.DefaultRequestHeaders.Accept.Clear();

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("ContentType", "application/json");
        return client;
    }
}

若對接方僅使用HTTPS協(xié)議,無需驗證證書,最好是忽略證書驗證,否則有可能會引起建立驗證證書連接異常,即添加

ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true

我們觀察上述代碼,有兩個地方都對證書驗證進行了設(shè)置,一個是在靜態(tài)構(gòu)造函數(shù)中ServicePointManager(簡稱SP),另外則在實例化HttpClient構(gòu)造函數(shù)中即HttpClientHandler(簡稱HCH),那么這二者是否有使用上的限制呢?

在.NET Framework中,內(nèi)置的HttpClient建立在HttpWebRequest之上,因此可以使用SP來配置

在.NET Core中,通過SP配置證書信息僅影響HttpWebRequest,而對HttpClient無效,需通過HCH配置來達(dá)到相同目的

所以去除在靜態(tài)構(gòu)造函數(shù)中對忽略證書的配置,改為在HttpClientHandler中

var client = new HttpClient(new HttpClientHandler
{
    ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true,
    SslProtocols = SslProtocols.Tls12
})

?

配置keep-alive我們俗稱為?;顧C制,所以在默認(rèn)請求頭中添加如下一行

 //增加?;顧C制,表明連接為長連接
 client.DefaultRequestHeaders.Connection.Add("keep-alive");

上述只是在報文頭中添加持久化連接標(biāo)識,但不意味著就一定生效,因為默認(rèn)是禁用持久化連接,所以為了保險起見,添加如下代碼

  //啟用保活機制(保持活動超時設(shè)置為 2 小時,并將保持活動間隔設(shè)置為 1 秒。)
  ServicePointManager.SetTcpKeepAlive(true, 7200000, 1000);
public static void SetTcpKeepAlive(bool enabled, int keepAliveTime, int keepAliveInterval)
{
    if (enabled)
    {
        if (keepAliveTime <= 0)
        {
            throw new ArgumentOutOfRangeException(nameof(keepAliveTime));
        }
        if (keepAliveInterval <= 0)
        {
            throw new ArgumentOutOfRangeException(nameof(keepAliveInterval));
        }
    }
}

最關(guān)鍵的一點則是默認(rèn)持久化連接數(shù)為2,非持久化連接為4

public class ServicePointManager { public const int DefaultNonPersistentConnectionLimit = 4; public const int DefaultPersistentConnectionLimit = 2; private ServicePointManager() { } }

那么問題是否就已很明了,項目中使用非持久化連接,即連接為4,未深究源碼具體細(xì)節(jié),大膽猜想一下,若連接大于4,是否會出現(xiàn)將此前連接主動關(guān)閉,重建新的連接請求呢?最終我們將原始代碼修改為如下形式文章來源地址http://www.zghlxwxcb.cn/news/detail-771090.html

static class Program
{
    static HttpClient httpClient = CreateHttpClient();

    static Program()
    {
        //默認(rèn)連接數(shù)限制為2,增加連接數(shù)限制
        ServicePointManager.DefaultConnectionLimit = 512;

        //啟用?;顧C制(保持活動超時設(shè)置為 2 小時,并將保持活動間隔設(shè)置為 1 秒。)
        ServicePointManager.SetTcpKeepAlive(true, 7200000, 1000);
    }

    static async Task Main(string[] args)
    {
        await httpClient.PostAsync("", new StringContent(""));

        Console.WriteLine("Hello World!");
    }

    static HttpClient CreateHttpClient()
    {
        var client = new HttpClient(new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true,
            SslProtocols = SslProtocols.Tls12
        })
        {
            Timeout = TimeSpan.FromSeconds(30)
        };

        client.DefaultRequestHeaders.Accept.Clear();
        //增加保活機制,表明連接為長連接
        client.DefaultRequestHeaders.Connection.Add("keep-alive");
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("ContentType", "application/json");
        return client;
    }
}

到了這里,關(guān)于.NET Core HttpClient請求異常分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常

    在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常

    在 ASP.NET Core Web API 中,異常篩選器(Exception Filter)是一種用于處理發(fā)生在 Web API 控制器或管道中的異常的機制。 異常篩選器可以捕獲和處理應(yīng)用程序中發(fā)生的異常,當(dāng)系統(tǒng)中出現(xiàn)未經(jīng)處理的異常的時候,異常篩選器就會執(zhí)行,我們可以在異常篩選器中對異常進行處理,例如

    2024年01月19日
    瀏覽(23)
  • 實時監(jiān)控.NET Core請求次數(shù):創(chuàng)建記錄最近5分鐘的請求,輕松可靠

    實時監(jiān)控.NET Core請求次數(shù):創(chuàng)建記錄最近5分鐘的請求,輕松可靠

    ? 概述: 在.NET Core中,通過創(chuàng)建RequestCountMiddleware中間件,結(jié)合MemoryCache,實現(xiàn)了記錄最近5分鐘請求次數(shù)的功能。該中間件在每個請求中更新計數(shù),并使用緩存存儲,為簡單而實用的請求監(jiān)控提供了一個示例。 要實現(xiàn)一個在.NET Core中記錄最近5分鐘請求次數(shù)的 RequestCountMiddlew

    2024年03月09日
    瀏覽(27)
  • 如何在 ASP.NET Core 配置請求超時中間件

    如何在 ASP.NET Core 配置請求超時中間件

    本文參考官方文檔,使用Asp.net core 8.0 的最小API 模板項目,配置超時中間件。 超時中間件可用于所有類型的ASP.NET Core應(yīng)用:最小 API、帶控制器的 Web API、MVC 和 Razor Pages。請求超時的屬性位于命名空間 Microsoft.AspNetCore.Http.Timeouts 中。 需要注意的是,當(dāng)應(yīng)用在調(diào)試模式下運行時

    2024年01月20日
    瀏覽(93)
  • Asp.Net Core服務(wù)端處理請求過來的壓縮格式

    ? ? ? ? 之前是直接傳沒有經(jīng)過壓縮的文件字節(jié),有時文件過大的話,可能占寬帶就多,寬帶流量都是錢。后來有個想法,在客戶端把文件進行壓縮,把壓縮的文件流發(fā)給服務(wù)端進行解壓。 1,先修改項目中 Startup.cs 文件中ConfigureServices()方法中的代碼: 2?,先修改項目中 S

    2024年02月06日
    瀏覽(93)
  • 【ASP.NET Core 基礎(chǔ)知識】--路由和請求處理--路由概念(二)

    一、路由參數(shù)傳遞方式 1.1 查詢字符串參數(shù) 在路由中,查詢字符串參數(shù)是一種常見的方式傳遞信息。這種方式通過URL中的查詢字符串(?key1=value1key2=value2)將參數(shù)附加到請求中。在ASP.NET Core中,可以通過以下方式在控制器動作方法中接收查詢字符串參數(shù): 在上述例子中,查詢

    2024年01月21日
    瀏覽(377)
  • ASP.NET Core如何知道一個請求執(zhí)行了哪些中間件?

    ASP.NET Core如何知道一個請求執(zhí)行了哪些中間件?

    需要添加兩個Nuget包分別是: Microsoft.AspNetCore.MiddlewareAnalysis 和 Microsoft.Extensions.DiagnosticAdapter ,前者是分析記錄中間件核心代碼實現(xiàn)后者是用來接收日志輸出的,由于是用的DiagnosticSource方式記錄日志,所以需要使用DiagnosticListener對象的SubscribeWithAdapter方法來訂閱。 這個適配器

    2023年04月09日
    瀏覽(101)
  • 在 ASP.NET Core Web API 中處理 Patch 請求

    PUT 和 PATCH 方法用于更新現(xiàn)有資源。 它們之間的區(qū)別是,PUT 會替換整個資源,而 PATCH 僅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一種靜態(tài)語言( dynamic 在此不表),當(dāng)我們定義了一個類型用于接收 HTTP Patch 請求參數(shù)的時候,在 Action 中無法直接從實例中得知客戶端提供了哪

    2024年02月04日
    瀏覽(98)
  • 【ASP.NET Core 基礎(chǔ)知識】--路由和請求處理--路由概念(一)

    在Web應(yīng)用中,路由是一個至關(guān)重要的概念,它負(fù)責(zé)將用戶的請求映射到相應(yīng)的處理程序,以確保正確的頁面或資源被呈現(xiàn)給用戶。通過將用戶請求與適當(dāng)?shù)奶幚沓绦蜿P(guān)聯(lián)起來,使得應(yīng)用能夠以有序和可維護的方式響應(yīng)用戶的操作。 一、ASP.NET Core路由基礎(chǔ) 1.1 路由的定義和作用

    2024年01月19日
    瀏覽(99)
  • .NET Core 引發(fā)的異常: “SqlSugar.SqlSugarException“ 位于 System.Private.CoreLib.dll 中

    在使用.NET Core開發(fā)應(yīng)用程序時,有時候會遇到各種不同的異常情況。其中一種常見的異常是 “SqlSugar.SqlSugarException”。這個異常通常在與數(shù)據(jù)庫交互的過程中出現(xiàn),特別是在使用SqlSugar庫時。 SqlSugar是一個流行的ORM(對象關(guān)系映射)框架,它簡化了與數(shù)據(jù)庫的交互操作。它提

    2024年02月04日
    瀏覽(22)
  • Taurus .Net Core 微服務(wù)開源框架:Admin 插件【4-2】 - 配置管理-Mvc【含請求日志打印】

    Taurus .Net Core 微服務(wù)開源框架:Admin 插件【4-2】 - 配置管理-Mvc【含請求日志打印】

    繼上篇:Taurus .Net Core 微服務(wù)開源框架:Admin 插件【4-1】 - 配置管理-Kestrel【含https啟用】 本篇繼續(xù)介紹下一個內(nèi)容: 界面如圖: 以下為配置說明: 控制 Taurus 的 Mvc 是否啟用,比如網(wǎng)關(guān)、或注冊中心,或者使用其它Mvc框架,可以選擇不啟用。 如正常訪問Mvc時: 禁用它后:

    2024年02月11日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包