2

为了安全和一致性,我不希望我的页面被缓存。当我在浏览器上点击返回按钮时,它应该总是去服务器获取 html。

我通过创建以下动作过滤器来实现它。

public class NoCache : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

我申请将所有内容过滤为全局过滤器

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Makes sure that cached pages are not served to any browser including chrome
        filters.Add(new NoCache());
    }

问题解决了。但现在所有图像、css 和 javascript 文件也没有被缓存。 我如何告诉它缓存它们?

4

1 回答 1

2

您可以尝试在您的web.config

<clientCache>元素的元素<staticContent>指定 Internet 信息服务 (IIS) 发送到 Web 客户端的与缓存相关的 HTTP 标头,这些标头控制 Web 客户端和代理服务器如何缓存 IIS 返回的内容。

例如,该属性指定内容应过期的日期和时间,IIS 将在响应中httpExpires添加 HTTP“ ”标头。ExpireshttpExpires属性的值必须是完全格式化的日期和时间,它遵循 中的规范RFC 1123。例如:

<configuration>
   <system.webServer>
      <staticContent>
         <clientCache cacheControlMode="UseExpires"
            httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />
      </staticContent>
   </system.webServer>
</configuration>

您可以参考此链接了解更多信息。

于 2013-06-21T07:45:35.743 回答