asp.net mvc:图片,Css文件& javascript文件未被缓存

时间:2013-06-21 06:57:36

标签: javascript html asp.net css asp.net-mvc

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

我通过创建以下actionfilter来实现它。

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());
    }

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

1 个答案:

答案 0 :(得分:2)

您可以尝试在web.config中启用缓存:

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

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

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

您可以参考this link了解更多信息。