【问题标题】:How to undo Response.Cache.SetNoStore()?如何撤消 Response.Cache.SetNoStore()?
【发布时间】:2014-11-06 21:25:01
【问题描述】:

我有一个 CMS 应用程序代码,它在所有请求上调用 Response.Cache.SetNoStore(),如果我是正确的,这将阻止代理/cdn 缓存这些页面/内容。因此,我有条件地调用以下代码:

Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetMaxAge(new TimeSpan(0, 30, 0));
Response.Cache.SetValidUntilExpires(true);

但这并没有从响应头中取出no-store参数,这是返回的http头:

Cache-Control:public, no-store, must-revalidate, max-age=1800

因此我的问题是,我怎样才能务实地取出 nostore 参数?如果这是不可能的,我如何/在哪里可以解析/修改 http-header,因为我试图解析 PagePreRender 事件并且没有应用 nostore 参数......这导致想知道这是哪个生命周期附加到标题?

【问题讨论】:

    标签: c# asp.net caching iis cache-control


    【解决方案1】:

    有一种方法可以在您调用 SetNoStore 后撤消它。您需要使用一些创造性的路由以不同的方式处理请求或反射以调用私有的内置重置。

    您可以访问HttpCachePolicyWrapper 以访问底层HttpCachePolicy,然后分配内部NoStore 字段或发出Reset 以恢复到默认缓存策略。

    response.Cache.SetNoStore(); // assign no-store
    BindingFlags hiddenItems = BindingFlags.NonPublic | BindingFlags.Instance;
    var httpCachePolicyWrapper = response.Cache.GetType(); // HttpCachePolicyWrapper type
    
    var httpCache = httpCachePolicyWrapper.InvokeMember("_httpCachePolicy", BindingFlags.GetField | hiddenItems, null, response.Cache, null);
    var httpCachePolicy = httpCache.GetType(); // HttpCachePolicy type
    
    // Reset Cache Policy to Default    
    httpCachePolicy.InvokeMember("Reset", BindingFlags.InvokeMethod | hiddenItems, null, httpCache, null);
    var resetAllCachePolicy = httpCachePolicy.InvokeMember("_noStore", BindingFlags.GetField | hiddenItems, null, httpCache, null);
    
    response.Cache.SetNoStore(); // assign no-store
    
    // Undo SetNoStore Cache Policy
    httpCachePolicy.InvokeMember("_noStore", BindingFlags.SetField | hiddenItems, null, httpCache, new object[] { false });
    var resetNoStoreOnly = httpCachePolicy.InvokeMember("_noStore", BindingFlags.GetField | hiddenItems, null, httpCache, null);
    

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 2014-04-12
      • 2012-01-06
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2010-12-06
      • 2023-03-24
      • 2019-08-23
      相关资源
      最近更新 更多