首页 > Web开发 > 详细

IHttpClientFactory笔记

时间:2020-05-19 10:15:31      阅读:43      评论:0      收藏:0      [点我收藏+]

在开发的过程中,遇到过这种带Factory的对象。先不扯什么工厂类,我也不知道跟工厂类有没有关联,还没有百度。

 

当需要向某特定URL地址发送HTTP请求并得到相应响应时,通常会用到HttpClient类。

该类包含了众多有用的方法,可以满足绝大多数的需求。但是如果对其使用不当时,可能会出现意想不到的事情。

using(var client = new HttpClient())

对象所占用资源应该确保及时被释放掉,但是,对于网络连接而言,这是错误的。

原因有二,

1:网络连接是需要耗费一定时间的,频繁开启与关闭连接,性能会受影响

2:开启网络连接时会占用底层socket资源,但在HttpClient调用其本身的Dispose方法时,并不能立刻释放该资源,这意味着你的程序可能会因为耗尽连接资源而产生预期之外的异常。

所以比较好的解决方法是延长HttpClient对象的使用寿命,比如对其建一个静态的对象

private static HttpClient Client = new HttpClient();

但从程序员的角度来看,这样的代码或许不够优雅。

所以在.NET Core 2.1中引入了新的HttpClientFactory类。

它的用法很简单,首先是对其进行IoC的注册

1 public void ConfigureServices(IServiceCollection services)
2 {
3     services.AddHttpClient();
4     services.AddMvc();
5 }

然后通过IHttpClientFactory创建一个HttpClient对象,之后的操作如旧,但不需要担心其内部资源的释放:

public class LzzDemoController : Controller
{
    IHttpClientFactory _httpClientFactory;

    public LzzDemoController(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }

    public IActionResult Index()
    {
        var client = _httpClientFactory.CreateClient();
        var result = client.GetStringAsync("http://myurl/");
        return View();
    }
}

 

 

 

 

 

 

 

直达原文

IHttpClientFactory笔记

原文:https://www.cnblogs.com/ZkbFighting/p/12915278.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!