配色: 字号:
ASP.NET Core 中间件之压缩、缓存
2016-12-13 | 阅:  转:  |  分享 
  
ASP.NETCore中间件之压缩、缓存

前言



今天给大家介绍一下在ASP.NETCore日常开发中用的比较多的两个中间件,它们都是出自于微软的ASP.NET团队,他们分别是

Microsoft.AspNetCore.ResponseCompression和Microsoft.AspNetCore.ResponseCaching,下面让我们一起看看的功能以及如何去使用吧。



GettingStarted



Microsoft.AspNetCore.ResponseCompression



Microsoft.AspNetCore.ResponseCompression这个中间件是.NETCore1.1版本中新增加的,看名字应该知道,它主要是负责对输出的内容进行压缩,那么在我们WEB开发中主要就是GZip压缩了。



Gzip压缩是我们在WEB中经常会使用的一项性能优化技术,它可以对页面输出的内容使用压缩算法(GZip)进行体积的压缩,那在以前的时候,我们可以使用IIS来做这项工作,但是现在我们的程序脱离IIS了,就必须有一个中间件来帮我们做这件事情了,它就是我们要介绍的这个中间件。



1、添加Microsoft.AspNetCore.ResponseCompression包



你可以使用VisualStudio打开NuGet包管理器控制台输入一下命令安装



Install-PackageMicrosoft.AspNetCore.ResponseCompression

也可以使用NuGet包管理器UI界面安装。



添加完成之后,你就可以在project.json中看到你添加的包了。注意目前版本是1.0.0.



image



2、更新Startup.cs文件



修改Startup,在ConfigureServices和Configure两个方法中添加如下代码:



publicclassStartup

{

...



publicvoidConfigureServices(IServiceCollectionservices)

{

services.AddResponseCompression();



...

}



publicvoidConfigure(IApplicationBuilderapp,ILoggerFactoryloggerFactory)

{

app.UseResponseCompression();



...

}

}

现在你就可以测试一下输入的HttpResponse是否被压缩了。



前:



image



后:







通过前后对比,可以看出来,在ResponseHeaders里面多了一个Content-Encoding:gzip的头部信息,说明我们的中间件生效了。



Microsoft.AspNetCore.ResponseCaching



Microsoft.AspNetCore.ResponseCaching这个中间件也是.NETCore1.1版本中新增加的,同样看名字应该知道,它主要是负责对输出的内容进行缓存设置。在以前我们可以同样在IIS中设置这些东西,但是粒度可能并没有这么细。



我之前写过一篇关于ASP.NETCore缓存的文章,里面介绍了ASP.NETCoreMVC中的Response缓存,它是通过一个ResponseCacheAttribute来实现的设置缓存头信息:



[ResponseCache(VaryByHeader="Accept-Encoding",Location=ResponseCacheLocation.Any,Duration=10)]

publicIActiwww.baiyuewang.netonResultAbout()

{

}

那,除了MVC提供的ResponseCacheAttribute外,还有另外一种方式设置缓存头信息,如下:



publicIActionResultAbout()

{

Response.GetTypedHeaders().CacheControl=newCacheControlHeaderValue()

{

Public=true,

MaxAge=TimeSpan.FromSeconds(10)

};

Response.Headers[HeaderNames.Vary]=newstring[]{"Accept-Encoding"};

}

这两种方式,最终的效果是一致的。



有了这些头信息之后,我们就可以在服务端里面这个中间件干些什么事情了。所以,该中间件将会在适当的时候读取这些头信息,然后缓存到本地缓存里面,当再有请求进来的时候会直接跳过action,读取缓存信息进行返回。



下面,我们一起来看看怎么样添加到我们的项目中吧,很简单。



1、添加Microsoft.AspNetCore.ResponseCaching包



你可以使用VisualStudio打开NuGet包管理器控制台输入一下命令安装



Install-PackageMicrosoft.AspNewww.wang027.comtCore.ResponseCaching

2、更新Startup.cs文件



修改Startup,在ConfigureServices和Configure两个方法中添加如下代码:



publicclassStartup

{

...



publicvoidConfigureServices(IServiceCollectionservices)

{

services.AddResponseCaching();



...

}



publicvoidConfigure(IApplicationBuilderapp,ILoggerFactoryloggerFactory)

{

app.UseResponseCaching();



...

}

}

输入的头信息如下:







详细示例可以看这里.



注意:上面的示例在Chrome浏览器中,当你按F5或者右键刷新页面时候,HttpResponseHeader中的Control-Cache:max-age有时候可能会不生效,这是因为Chrome浏览器有很智能的算法来猜测你当前的行为是真的想刷新还是取缓存。所以你可以试着把你的地址放入到一个HTML的Link中或者新开一个选项卡键入地址尝试。而Edge和IE浏览器行为是符合预期的。



总结



以上是这两个中间件的功能及使用方法,很简单,就不多说了,如果你觉得对你有帮助,点个赞就是对我最大的鼓励。



如果你对.NETCore感兴趣可以关注我,我会定期在博客分享关于.NETCore的学习心得。

献花(0)
+1
(本文系thedust79首藏)