C# 在aspnetcore mvc控制器中处理httpClient
我正在创建一个新的Asp.NETCore(NETStandard2)Mvc控制器,它使用WebAPI(REST)调用来获取数据。我一直在关注互联网上来自微软和非微软的许多例子。这些都使用“标准”using(var client=new HttpClient())构造。C# 在aspnetcore mvc控制器中处理httpClient,c#,rest,asp.net-core-mvc,asp.net-core-webapi,C#,Rest,Asp.net Core Mvc,Asp.net Core Webapi,我正在创建一个新的Asp.NETCore(NETStandard2)Mvc控制器,它使用WebAPI(REST)调用来获取数据。我一直在关注互联网上来自微软和非微软的许多例子。这些都使用“标准”using(var client=new HttpClient())构造。 但是,请阅读文档以了解更多信息 HttpClient打算实例化一次并在整个过程中重复使用 应用程序的生命周期。实例化的HttpClient类 每一个请求都会耗尽重型设备下可用的插座数量 荷载。这将导致SocketException
但是,请阅读文档以了解更多信息 HttpClient打算实例化一次并在整个过程中重复使用 应用程序的生命周期。实例化的HttpClient类 每一个请求都会耗尽重型设备下可用的插座数量 荷载。这将导致SocketException错误。下面是一个例子 正确使用HttpClient 这让我思考,我是创建一个作用域实例并将其添加到DI中,还是在同一页面上按照他们的示例在控制器上创建一个静态实例?如果是静态实例,如何处理它 或者,有人能给我指一个标准CRUD视图实现的生产就绪MVC包装器吗?如果您还没有阅读 如果你有什么负担,你需要记住这两个 事情:
如果你还想把它包起来,看看 Upd: 确保您处理了
HttpRequestMessage
和HttpResponseMessage
的实例
来源:如果您没有阅读
如果你有什么负担,你需要记住这两个
事情:
如果你还想把它包起来,看看 Upd: 确保您处理了
HttpRequestMessage
和HttpResponseMessage
的实例
来源:对于任何使用.net core 2.1或更高版本的用户,建议使用
HttpClientFactory
为了解决上述问题并简化HttpClient实例的管理,.NET Core 2.1引入了一个新的HttpClientFactory,它也可用于实现弹性HTTP调用
了解如何利用它 对于使用.net core 2.1或更高版本的用户,建议使用
HttpClientFactory
为了解决上述问题并简化HttpClient实例的管理,.NET Core 2.1引入了一个新的HttpClientFactory,它也可用于实现弹性HTTP调用
了解如何利用它 您仍然可以使用DI。只需将其生命周期声明为singleton(或者DI对单个实例而不是作用域使用的任何术语)要使所有作用域共享同一实例,请注意,如果您的
httpclient
位于具有singletone
生存期的服务中,并且如果该服务依赖于其他服务,则这些其他服务不应作用域
。您仍然可以使用DI。只需将其生命周期声明为singleton(或者DI对单个实例而不是作用域使用的任何术语)要让所有作用域共享同一实例,请注意,如果您的httpclient
位于具有singletone
生存期的服务中,并且如果该服务依赖于其他服务,则这些其他服务的作用域不应为?我们应该Dispose()
还是不应该?@SkorunkaFrantišek,您应该处理两个类的实例httprequestmeessage
和HttpResponseMessage
示例:Src:有意义。如果因为使用了GetAsync(stringrequesturi)
override而没有HttpRequestMessage
,该怎么办?是否以某种方式处理了它?如果您想要一个完整的控件,请使用sendaync()
而不是像GetAsync()
、postasync()
等包装器。在GetAsync()
的情况下,这不应该是一个问题,因为HTTP GET受到2k的限制。所以GC会处理好的。这是有道理的。无论如何,如何将最大请求长度连接到Dispose?谢谢。关于HttpResponseMessage
如何?我们应该Dispose()
还是不应该?@SkorunkaFrantišek,您应该处理两个类的实例httprequestmeessage
和HttpResponseMessage
示例:Src:有意义。如果因为使用了GetAsync(stringrequesturi)
override而没有HttpRequestMessage
,该怎么办?是否以某种方式处理了它?如果您想要一个完整的控件,请使用sendaync()
而不是像GetAsync()
、postasync()
等包装器。在GetAsync()
的情况下,这不应该是一个问题,因为HTTP GET受到2k的限制。所以GC会处理好的。这是有道理的。无论如何,如何将最大请求长度连接到Dispose?非常感谢。