使用屬性阻止ASP.NET MVC中的緩存以執行特定操作我有一個ASP.NET MVC 3應用程序。此應用程序通過JQuery請求記錄。JQuery回調一個以JSON格式返回結果的控制器動作。我無法證明這一點,但我擔心我的數據可能會被緩存。我只希望將緩存應用于特定操作,而不是所有操作。是否有一個屬性可以放在一個動作上以確保數據不會被緩存?如果沒有,我如何確保瀏覽器每次都獲得一組新記錄而不是緩存集?
3 回答

慕后森
TA貢獻1802條經驗 獲得超5個贊
要確保JQuery不緩存結果,請在ajax方法上添加以下內容:
$.ajax({ cache: false //rest of your ajax setup});
或者為了防止MVC中的緩存,我們創建了自己的屬性,你也可以這樣做。這是我們的代碼:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]public sealed class NoCacheAttribute : 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); }}
然后用你的控制器裝飾[NoCache]
。或者為所有你可以把屬性放在你繼承你的控制器的基類的類(如果你有的話),就像我們在這里:
[NoCache]public class ControllerBase : Controller, IControllerBase
如果您需要它們是不可緩存的,而不是裝飾整個控制器,您還可以使用此屬性修飾某些操作。
如果您的類或操作NoCache
在瀏覽器中呈現時沒有,并且您想檢查它是否正常工作,請記住在編譯更改后,您需要在瀏覽器中執行“硬刷新”(Ctrl + F5)。在您執行此操作之前,您的瀏覽器將保留舊的緩存版本,并且不會使用“正常刷新”(F5)刷新它。
- 3 回答
- 0 關注
- 525 瀏覽
添加回答
舉報
0/150
提交
取消