Asp.net core 学习笔记 ( HttpClient )
2017-09-25 11:14
1241 查看
2017-09-25
core 和 .net 4.5 一样都可以使用 HttpClient
没什么特别的, 只是在学习的时候发现一个之前没留意到的问题.
refer :
https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ http://byterot.blogspot.my/2016/07/singleton-httpclient-dns.html http://www.cnblogs.com/dudu/p/csharp-httpclient-attention.html https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client http://www.cnblogs.com/Wddpct/p/6229090.html
大致上说的是, HttpClient 不要使用 using, 因为它并不会释放 TCP 连接, 应该在整个应用里把 HttpClient 设置成单列
core 要设置单列对象很容易
定义好类, 由于每个 TCP 的 baseAddress 不能换的,所以如果你有很多个不同区的请求要发, 那么建议开多几个 HttpClient 实例.
keep-alive 的目的是让服务端知道我们的连接不要马上断开, 这样发多个请求的话可以快一些.
然后在 startup.cs 提供服务就可以了.
core 会帮我们搞定 singleton 的线程安全等问题. 不需要像从前还要用 lock 什么的那么麻烦了.
而且这里只是定义,一直到控制器注入时才会初始化实例哦.
在控制器注入了就可以发请求咯~
note : 如果服务器 restart, 我们的连接并不需要任何处理, 都是自动的. 放心, dns 的问题我没有遇到, 遇到了才打算呗.
core 和 .net 4.5 一样都可以使用 HttpClient
没什么特别的, 只是在学习的时候发现一个之前没留意到的问题.
refer :
https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ http://byterot.blogspot.my/2016/07/singleton-httpclient-dns.html http://www.cnblogs.com/dudu/p/csharp-httpclient-attention.html https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client http://www.cnblogs.com/Wddpct/p/6229090.html
大致上说的是, HttpClient 不要使用 using, 因为它并不会释放 TCP 连接, 应该在整个应用里把 HttpClient 设置成单列
core 要设置单列对象很容易
public class VisautoHttpClient : HttpClient { public VisautoHttpClient() { BaseAddress = new Uri("http://visauto.stooges.com.my"); Timeout = TimeSpan.FromSeconds(30); DefaultRequestHeaders.Clear(); DefaultRequestHeaders.Add("Accept", "text/html"); DefaultRequestHeaders.Connection.Add("Keep-Alive"); } }
定义好类, 由于每个 TCP 的 baseAddress 不能换的,所以如果你有很多个不同区的请求要发, 那么建议开多几个 HttpClient 实例.
keep-alive 的目的是让服务端知道我们的连接不要马上断开, 这样发多个请求的话可以快一些.
然后在 startup.cs 提供服务就可以了.
public void ConfigureServices(IServiceCollection services) { // services services.AddSingleton<VisautoHttpClient, VisautoHttpClient>(); }
core 会帮我们搞定 singleton 的线程安全等问题. 不需要像从前还要用 lock 什么的那么麻烦了.
而且这里只是定义,一直到控制器注入时才会初始化实例哦.
在控制器注入了就可以发请求咯~
[Area("Web")] public class HttpController : Controller { public HttpController( VisautoHttpClient httpClient ) { this.httpClient = httpClient; } private HttpClient httpClient { get; set; } [Route("http")] public async Task<IActionResult> Index() { try { string x = await httpClient.GetStringAsync(""); } catch (Exception ex) { } return View(); } }
note : 如果服务器 restart, 我们的连接并不需要任何处理, 都是自动的. 放心, dns 的问题我没有遇到, 遇到了才打算呗.
相关文章推荐
- ASP.NET MVC Web API 学习笔记----HttpClient简介
- ASP.NET Core 2 学习笔记(九)模型绑定
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
- Asp.net core 学习笔记 ( IIS, static file 性能优化 )
- Asp.net core 学习笔记 ( DI 依赖注入 )
- ASP.NET 3.5核心编程学习笔记(41):HTTP处理程序与HTTP模块
- ASP.NET Core 2 学习笔记(二)生命周期
- ASP.NET Core 2 学习笔记(十二)REST-Like API
- ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
- Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
- Asp.net core 2.0.1 Razor 的使用学习笔记(二)
- Asp.net core 2.0.1 Razor 的使用学习笔记(三)
- Asp.net core 2.0.1 Razor 的使用学习笔记(五)
- ASP.NET 3.5核心编程学习笔记(26):HttpApplication对象
- ASP.NET Core 2.0系列学习笔记-启动类Startup
- ASP.NET Core 2 学习笔记(十一)Cookies & Session
- ASP.NET ZERO Core Application 学习笔记
- ASP.NET 3.5核心编程学习笔记(42):HTTP处理程序的编写之建立数据报表
- ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像
- Asp.net core 2.0.1 Razor 的使用学习笔记(六)