禁用客户端缓存

时间:2011-03-31 07:57:31

标签: asp.net-mvc iis-7 asp.net-mvc-3 outputcache

我一直在搜索有关如何在项目级别上禁用客户端缓存的信息。 我知道我可以在动作方法之前添加以下内容:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

我还阅读了一些关于为缓存创建配置文件的内容,但这也意味着在几个地方引用它们。我想在web.config或IIS中设置一个设置?

我正在处理的项目包含很多部分视图

提前感谢您对此事的任何建议。

6 个答案:

答案 0 :(得分:30)

您可以通过Web.Config禁用浏览器缓存:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="no-cache, no-store" />
                <add name="Pragma" value="no-cache" />
                <add name="Expires" value="-1" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

来源:http://blog.jamesjones.name/2009/11/how-to-disable-browser-caching-in.html

修改:为Chrome http://code.google.com/p/chromium/issues/detail?id=28035添加了no-storeCache-Control

您可以在项目级别或子目录级别设置此项,以根据需要控制浏览器缓存。例如,在主要数据驱动/动态站点中,我可以在项目级别设置这些头,但是在/ static目录(包含我的.js,.css,images)中,添加另一个web.config,其中包括适当的</clear>指令,可能会设置一个远期未来的过期标题。

答案 1 :(得分:4)

您可以设置BaseController并为其设置缓存配置文件。 然后让所有控制器继承此BaseController


更新

以下是我的观点:

// Here is my custom OutputCaheAttribute to prevent cache at all.
//Whatever you may put anything you want.
//Of course i don't use it here but i put it to show you how it's going.
[NoCache]
public class BaseController : Controller
{
    protected override ViewResult View(string viewName, string masterName, object model)
    {
        // I do some stuffs here to change MasterPage depending on current culture.
        // Don't care about it i just wanna show you why BaseController is good idea.
    }
}

然后所有我的控制器继承此BaseController而非普通Controller

希望这有用;)

答案 2 :(得分:0)

您可以在web.config中定义缓存配置文件,但是,使用缓存配置文件似乎不适用于mvc 3中的OutputCache属性。请阅读此问题:Caching ChildActions using cache profiles won't work?

答案 3 :(得分:0)

OutputCache属性用于服务器端输出操作输出缓存。要将其关闭,您只需将该属性应用于操作/控制器即可。如果要禁用客户端,则通过添加标头来通知浏览器不要缓存结果。

答案 4 :(得分:0)

试试这个

  

[OutputCache(NoStore = true,Duration = 0,VaryByParam =&#34; None&#34;)]

答案 5 :(得分:0)

针对每个文件或基于目录的缓存清除扩展@Tom的答案:

<configuration>
<!--  disable cache for every file in this directory -->
  <location path="dist">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="DisableCache" />
      </staticContent>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache, no-store, must-revalidate, pre-check=0, post-check=0, max-age=0, s-maxage=0" />
          <add name="Pragma" value="no-cache" />
          <add name="Expires" value="-1" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>
</configuration>