2011-03-31 252 views
13

我一直在尋找關於如何在項目級別上禁用客戶端緩存的信息。 我知道我可以在操作方法之前添加以下內容:禁用客戶端緩存

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

我也看了一些關於製作配置文件緩存,但是這也意味着在幾個地方指的他們。我想在web.config中設置一個設置,或者在IIS中設置一個設置?

我工作的項目包含了大量的局部視圖

預先感謝您對該事項的任何意見。

回答

0

可以在web.config定義緩存配置文件,但是,使用緩存配置文件似乎並沒有在MVC 3. OutputCache屬性上班閱讀這個問題:Caching ChildActions using cache profiles won't work?

+0

「似乎不工作」 聽上去有點殘酷。這聽起來好像只是不完全支持孩子的行爲。 – bzlm 2011-03-31 21:53:58

+0

@bzlm有什麼區別?它不能用於兒童行爲。 – frennky 2011-03-31 22:39:31

+0

即使您從配置文件中除了「持續時間」和「VaryByParam」之外的所有內容都會被刪除? – bzlm 2011-04-01 07:15:40

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. 
    } 
} 

然後ALL我控制器從這個BaseController,而不是正常Controller繼承。

希望這是有幫助的;)

+0

謝謝你的評論Wahid!但是我不是強制爲每個ActionResult聲明一個OutputCache屬性嗎?或者我可以以某種方式在課堂上做到這一點? – burktelefon 2011-04-01 07:18:14

+0

是的,您可以在控制器上執行此操作,則此控制器中的所有操作都將採用相同的緩存設置。 – 2011-04-09 11:06:30

0

OutputCache屬性用於服務器端輸出動作的輸出緩存。要關閉它,只需將該屬性應用於動作/控制器。如果你想禁用客戶端,那麼通過添加一個通知瀏覽器不緩存結果的頭部來處理。

26

您可以通過禁用的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

編輯:添加no-storeCache-Control Chrome瀏覽器(http://code.google.com/p/chromium/issues/detail?id=28035

您可以在項目中設置此級別或子目錄級別來根據需要控制瀏覽器緩存。例如,在主要是數據驅動/動態網站中,我可以在項目級別設置這些標題,但在/靜態目錄(包含我的.js,.css,圖像)中添加另一個web.config,其中包括適當的</clear>指令,並且可能會設置遠期過期頭。

0

試試這個

[的OutputCache(NoStore = TRUE,持續時間= 0,VaryByParam時= 「無」)]