2

我有一個ASP.NET MVC應用程序,它使用區域來傳遞不同的功能,具體取決於使用哪個URL。例如在MVC中使用OutputCache時,sub.domain.com給了我www.domain.com緩存頁面

  • www.domain.com - 網站區
  • app.domain.com - 應用領域
  • * .domain.com - 客戶區域

所以,問題是,取決於傳入的網址,我們會將您路由到不同的MVC區域。這一切都使用路由與一些擴展和偉大的工作。

現在,如果我啓用對我的www默認路由的Index()Action的outputcache,下次我點擊app.domain.com時,我得到了www域的緩存版本。我使用fiddler進行了檢查,響應是200 OK,所以它肯定會觸發服務器。但是,我的自定義路由中的日誌記錄告訴我,它沒有打到該代碼。

那麼,OutputCache不能基於uri工作,而是使用其他一些算法?

感謝

回答

0

行爲將取決於您決定存儲緩存(Location屬性)。如果您將緩存存儲在服務器上(OutputCacheLocation.Server),則執行該操作的結果將存儲在服務器上,並且當對該操作發出後續請求時,服務器將被命中並且它將直接返回緩存的版本而不執行你描述的行爲的控制器動作。

如果您將緩存存儲在客戶端(OutputCacheLocation.Client)上,則緩存將保留在客戶端瀏覽器上。在這種情況下,如果對同一個動作進行後續請求,客戶端將不再命中服務器,而是直接從其緩存中提供頁面。請記住,如果您在瀏覽器中點擊了F5,則會使給定頁面的緩存過期,因此服務器將會被擊中。

+0

感謝您的回覆。它被設置爲默認值,假設它被設置爲服務器。我仍然認爲這是不正確的,因爲它正在返回不同動作的緩存版本(sub.domain.com返回www.domain.com緩存頁面)。 – James 2012-03-10 08:41:24

+0

@詹姆斯,的確,這看起來不正確。您提到了路由的一些自定義代碼。你能證明這是如何完成的嗎? – 2012-03-10 09:33:51

+0

我使用DomainRoutes http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx來限制路由到某些域。這些路線在每個區域註冊中註冊 – James 2012-03-12 10:42:25

1

[OutputCache(VaryByHeader =「Host」)]應該有幫助。

相關問題