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

慕后森
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個贊
要確保JQuery不緩存結(jié)果,請?jiān)赼jax方法上添加以下內(nèi)容:
$.ajax({ cache: false //rest of your ajax setup});
或者為了防止MVC中的緩存,我們創(chuàng)建了自己的屬性,你也可以這樣做。這是我們的代碼:
[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
在瀏覽器中呈現(xiàn)時沒有,并且您想檢查它是否正常工作,請記住在編譯更改后,您需要在瀏覽器中執(zhí)行“硬刷新”(Ctrl + F5)。在您執(zhí)行此操作之前,您的瀏覽器將保留舊的緩存版本,并且不會使用“正常刷新”(F5)刷新它。
- 3 回答
- 0 關(guān)注
- 526 瀏覽
添加回答
舉報
0/150
提交
取消