在 C# Web 应用程序中使用 HttpClient

using HttpClient from within a c# web app

MS 文档说 "HttpClient is intended to be instantiated once and re-used throughout the life of an application" - 这似乎很公平,但当您在 ​​Web 应用程序中使用 HttpClient 时,这并不那么简单。所有使用 HttpClient 的示例都是通过控制台应用程序完成的,事实上我找不到任何使用 HttpClient 使用 API 的 Web 应用程序的示例。所以我的问题是 HttpClient 是否真的意味着要从网络应用程序中使用,还是我应该使用 WebRequest 或其他东西?感谢所有回复的人!

24 小时后添加....它是一个 .net 框架应用程序。抱歉,我只是想了解答案,我以前从未使用过这个网站,并假设我会在发布答案时收到一封电子邮件 - 真诚感谢您的所有评论,看起来我有一些阅读要做

首选方式是 use HttpClientFactory

然后您可以简单地在您的服务中注入 HttpClient,让 DI 容器担心生命周期。

控制台应用程序通常用于教程项目,因为它们更易于创建,而且 运行 不会增加涉及服务托管的复杂性。使用控制台项目来说明 HttpClient 的功能比从 Web 应用程序内部更容易。此外,值得一提的是,所有 .NET Core 应用程序都是控制台应用程序。

在生产环境中,Web 应用程序托管在 Web 服务器、容器、windows 服务或无服务器环境中,因此管理 HttpClient 的生命周期非常重要,并遵循 Microsoft 的建议在这里是有道理的。您肯定会使用 IoC 容器来管理应用程序中的对象图。您可以配置 IoC,以便 HttpClient 的生命周期是单例或每个 HTTP 请求实例化。

如果您使用的是 dotnet 核心,那么如果不为您的 HttpClient 使用私有静态字段,则使用 HttpClientFactory。这些是推荐的最佳实践。第二种选择仍然会带来一些问题,但它们是更多的边缘情况,不会最终耗尽您的套接字。这篇文章解释的非常好https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/