未指定的VaryByParam
參數時用作緩存字符串(鍵)的內容?未指定VaryByParam時ASP.NET MVC OutputCache如何工作
[OutputCache(Duration = 30)]
public ActionResult Index(int customerId, Foo foo, Bar bar)
{
/* ... */
}
我找不到上高速緩存時未指定VaryByParam
(或VaryByCustom
)是如何表現的任何文件。什麼被用作鑰匙?
通過做一些快速測試,在我看來,似乎所有的動作參數都用於緩存鍵。但是當的某些參數是對象(如這些foo
,bar
參數)時如何緩存工作?它使用他們的哈希碼嗎?或者它是否使用請求中的表單/查詢字符串變量?
我無法找到關於此主題的足夠文檔,但我認爲了解這些實現細節以避免將來的錯誤和對緩存機制的誤解是十分棘手的。
我主要對ASP.NET MVC第5版感興趣,但是如果有人知道關於OutputCache
屬性的一些歷史記錄,我認爲這個信息也是非常有用的。
感謝您的回答或鏈接!
下面是相關[源代碼(HTTPS ://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/OutputCacheAttribute.cs) - 請參閱GetChildActionUniqueId和GetUniqueIdFromActionParameters方法。如果我正確解釋這個請求,請求的所有參數都使用他們的名字 – Andrei
@Andrei:謝謝。據我瞭解,有一些DescriptorUtil實際上採用'foo'對象,並以某種方式從中產生Id。我發現[源代碼](https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/DescriptorUtil.cs),但我不知道它是如何產生從給定的對象的字符串ID ... –
@Andrei:同樣,通過查看你發佈的源代碼,似乎沒有額外的設置指定,'OutputCache'屬性似乎使用'VaryByParam =「*」'( [第23行](https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/OutputCacheAttribute.cs#L23))。你也是這樣理解的嗎? –