在ASP.NET核心应用程序中,我有一个返回一些数据的操作方法。我想将这个数据缓存到客户端上。因此,基于这里的文件,我可以在action方法上使用ResponseCache属性。此属性在响应中添加Cache-Control头。
响应缓存是指在HTTP操作生成的ASP.NET响应上指定与缓存相关的头部。这些标头指定您希望客户机和中间(代理)机器如何缓存对某些请求的响应(如果有的话)。这可以减少客户机或代理向web服务器提出的请求的数量,因为将来对相同操作的请求可能会从客户机或代理的缓存中处理。
也是
响应缓存不缓存web服务器上的响应。它与输出缓存不同,在早期版本的ASP.NET和ASP.NET MVC中,输出缓存将在服务器上的内存中缓存响应。
这就是我的动作方法
public class LookupController : Controller
{
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}
}然后我使用浏览器调用这个方法,因为http://localhost:40004/lookup/getstateprovinces是请求和响应头

注意,响应头的Cache-Control: public,max-age-120与预期的一样。但是,如果使用F5刷新页面( 120秒前),则GetStateProvince操作方法中的调试器断点总是会命中。这意味着它不会在客户端发布数据。
我还需要做什么来启用客户端缓存吗?
更新我尝试使用IE,Chrome和邮递员,没有运气。每次我在地址栏中键入url或按下刷新时,客户端(即浏览器或邮递员)都会调用action方法。
发布于 2017-01-16 12:20:35
实际上,ResponseCache属性按预期工作。
不同之处在于,如果您浏览网站页面(case 1)或使用后退和转发按钮(而不是刷新页面时),则响应将被缓存。
作为case 1的一个示例,我有以下内容:
正如您将在文章ASP.Net Core1.1中的响应缓存中看到的那样,本文将说明以下内容:
在浏览器会话期间,浏览网站内的多个页面或使用后退和转发按钮访问网页,内容将从本地浏览器缓存中提供(如果未过期)。 ,但是当通过F5刷新页面时,请求将转到服务器,页面内容将被刷新。您可以通过使用F5刷新联系人页面来验证它。 因此,当您点击F5时,响应缓存过期值就没有作用来服务内容。您应该看到200响应的联系请求。
参考文献:
发布于 2019-01-02 13:00:16
长话短说,像下面这样使用ResponseCache属性就足以使基于到期的客户端缓存在全新的默认dotnet核心项目(包括async方法)中工作:
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}在上面的屏幕截图中,这是正确的,因为Cache-Control: public,max-age=120在那里是可见的。在大多数情况下,浏览器不会在过期前发送后续请求(即接下来的120秒或2分钟),但这是浏览器(或其他客户端)的决定。
如果不管发送请求,您要么有一些中间件或服务器配置覆盖您的响应头,要么您的客户端忽略了缓存指令。在上面的截图中,客户端忽略缓存,因为缓存控制头就在那里。
客户端缓存被忽略并发送请求的常见情况:
Cache-Control: no-cache
Cache-Control: max-age=0 (这在屏幕截图中是可见的)
Cache-Control: no-cache报头,使其绕过本地缓存,从而导致发送请求;您可以从“设置”对话框禁用它,在这种情况下,将不再使用上述客户端缓存配置发送请求。此时,我们已经超越了基于过期的客户端缓存,服务器将以某种方式接收请求,并发生另一层缓存:您可以让服务器使用304 Not Modified代码进行响应(这再次取决于客户机以它想要的方式进行解释),或者使用服务器端缓存并使用完整的内容进行响应。或者,您可能不会使用任何后续缓存,只需在服务器上再次执行整个请求处理。
注意:在启动配置中,ResponseCache属性不应与services.AddResponseCaching() & app.UseResponseCaching()中间件混淆,因为这是用于服务器端缓存(默认情况下,在使用中间件时使用内存缓存)。客户端缓存不需要中间件来工作,属性本身就足够了。
发布于 2016-11-02 10:21:05
首先,我不想澄清什么,我相信你已经知道了。
现在,如果您希望缓存与OutputCache相同,那么您可能必须使用预览版本1.1,即刚刚发布的版本。
ASP.net核心1.1预览版
https://blogs.msdn.microsoft.com/webdev/2016/10/25/announcing-asp-net-core-1-1-preview-1/
他们引入了新的响应缓存中间件。响应缓存中间件
这里有它的演示。https://github.com/aspnet/ResponseCaching/blob/dev/samples/ResponseCachingSample/Startup.cs
https://stackoverflow.com/questions/40369112
复制相似问题