簡體   English   中英

在 aspnetcore mvc 控制器中處理 httpClient

[英]disposing httpClient in aspnetcore mvc controller

我正在創建一個新的 Asp.Net Core(網絡標准 2)Mvc 控制器,它使用 WebAPI(REST)調用來獲取數據。 我正在關注來自微軟和非微軟來源的互聯網上顯示的許多示例。 這些都使用“標准” using(var client = new HttpClient()) 構造。
但是,然后閱讀HttpClient的文檔

HttpClient 旨在實例化一次並在應用程序的整個生命周期中重復使用。 為每個請求實例化一個 HttpClient 類將耗盡重負載下可用的套接字數量。 這將導致 SocketException 錯誤。 下面是一個正確使用 HttpClient 的例子。

這讓我想到,我是創建一個作用域實例並將其添加到 DI,還是在同一頁面上按照他們的示例,並在控制器上創建一個靜態實例? 如果是靜態實例,我該如何處置它?

或者,任何人都可以向我指出用於標准 CRUD 視圖實現的生產就緒 MVC 包裝器嗎?

如果您還沒有閱讀 “您使用 HttpClient 錯誤並且它正在破壞您的軟件的穩定性”

如果您有任何類型的負載,則需要記住以下兩件事:

  1. 使您的 HttpClient 靜態化。
  2. 除非您明確尋找特定行為(例如導致服務失敗),否則不要在 using 中處理或包裝您的 HttpClient。

我同意在這種情況下可以使用mike z DI。

例如 SimpleInjector 的Singleton負責處理。

Simple Injector 保證實例以與創建相反的順序進行處理。


如果您仍然想包裝它,請查看“使用帶有可選 HMAC 身份驗證的 HttpClient 調用 ASP.NET WEB API REST 服務的通用包裝器”

更新:確保您處理了HttpRequestMessageHttpResponseMessage的實例。 查看使用示例

來源: http : //faithlife.codes/blog/2017/03/usage-guidelines-for-httpclient/

對於使用.net core 2.1或更高版本的任何人,建議使用HttpClientFactory

為了解決上述問題並使 HttpClient 實例的管理更容易,.NET Core 2.1 引入了一個新的 HttpClientFactory 也可用於實現彈性 HTTP 調用

有關如何利用它,請參閱microsoft 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM