Asp.net core ResponseCache属性不在客户端缓存数据
在ASP.NET核心应用程序中,我有一个返回一些数据的操作方法。我想在客户端缓存此数据。因此,基于操作方法,我可以使用Asp.net core ResponseCache属性不在客户端缓存数据,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,coreclr,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,Coreclr,在ASP.NET核心应用程序中,我有一个返回一些数据的操作方法。我想在客户端缓存此数据。因此,基于操作方法,我可以使用ResponseCache属性。此属性在响应中添加缓存控制头 响应缓存是指在HTTP上指定与缓存相关的头 ASP.NET核心MVC操作的响应。这些标题指定了 您希望客户端和中间(代理)计算机缓存响应 对于某些请求(如果有)。这可以减少 客户端或代理向web服务器发出的请求,因为 同一行动的请求可由客户或代理的 缓存 也 响应缓存不会在web服务器上缓存响应。信息技术 与输出缓存不
ResponseCache
属性。此属性在响应中添加缓存控制
头
响应缓存是指在HTTP上指定与缓存相关的头
ASP.NET核心MVC操作的响应。这些标题指定了
您希望客户端和中间(代理)计算机缓存响应
对于某些请求(如果有)。这可以减少
客户端或代理向web服务器发出的请求,因为
同一行动的请求可由客户或代理的
缓存
也
响应缓存不会在web服务器上缓存响应。信息技术
与输出缓存不同,输出缓存将响应缓存在
ASP.NET和ASP.NET MVC早期版本中的服务器
这就是我的动作方法
public class LookupController : Controller
{
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}
}
公共类LookupController:控制器
{
[HttpGet]
[响应缓存(持续时间=120)]
公共IEnumerable GetStateProvisions()
{
返回_domain.getStateProvisions();
}
}
然后我使用browser作为调用方法
以下是请求和响应头
请注意,响应头具有预期的缓存控制:public,max-age-120
。
但是,如果使用F5刷新页面(120秒之前),GetStateProvince操作方法中的调试器断点将始终命中。这意味着它不会在客户端保存数据
我还需要做什么来启用客户端缓存
更新
我尝试过使用IE、Chrome和POSTMAN,但运气不佳。每次我在地址栏中键入url或点击刷新,客户端(即浏览器或邮递员)都会调用action方法。首先,我想澄清几件事,我相信您已经知道了
这里有它的演示 实际上ResponseCache属性按预期工作。
不同之处在于,如果在网站页面中导航(案例1),或使用后退和前进按钮(,则在刷新页面时不缓存响应) 作为案例1的一个例子,我有以下几点:
- 你在第二页
- 键入其他url,然后单击“输入”或单击网页中的链接:
- 再次键入url(您将看到这次从磁盘缓存中获取对此url的响应)
但当通过F5刷新页面时,请求将转到服务器,页面内容将被刷新。您可以通过使用F5刷新联系人页面进行验证。
因此,当您点击F5时,响应缓存过期值在服务内容方面没有任何作用。您应该看到200个联系人请求的响应 参考文献:
[1].
[2].
[3] :长话短说,使用如下
ResponseCache
属性足以使基于过期的客户端缓存在全新的默认dotnet核心项目中工作(包括异步
方法):
[HttpGet]
[响应缓存(持续时间=120)]
公共IEnumerable GetStateProvisions()
{
返回_domain.getStateProvisions();
}
这在上面的屏幕截图中正常工作,因为在那里可以看到缓存控件:public,max age=120
。在大多数情况下,浏览器不会在过期之前发送后续请求(即在接下来的120秒或2分钟内),但这是浏览器(或其他客户端)的决定
如果请求被发送,则可能是某些中间件或服务器配置覆盖了响应头,或者客户机忽略了缓存指令。在上面的屏幕截图中,客户端忽略缓存,因为缓存控制头在那里
忽略客户端缓存并发送请求的常见情况:
- 在没有证书的情况下使用HTTPS(或无效证书,这在本地开发中很常见,因此请确保在测试缓存时使用HTTP,或信任自签名证书)时使用任何类型的缓存
- 大多数浏览器开发工具在打开时默认禁用缓存,这可以禁用
- 浏览器通常发送额外的标题,Chrome发送
缓存控制:无缓存
- 浏览器通常发送额外的标题,Chrome发送
- 直接刷新(即Ctrl+F5)将指示大多数浏览器不使用缓存,并在不考虑年龄的情况下发出请求
- 浏览器通常会发送额外的标题,Chrome会发送
(这在屏幕截图中可见)缓存控制:max age=0
- 浏览器通常会发送额外的标题,Chrome会发送
- 邮递员发送
头,使其绕过本地缓存,导致发送请求;您可以从设置对话框中禁用它,在这种情况下,将不再使用上述客户端缓存配置发送请求缓存控制:no Cache
304命令使服务器响应
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}