gpt4 book ai didi

c# - 使用属性防止在 ASP.NET MVC 中缓存特定操作

转载 作者:IT王子 更新时间:2023-10-29 03:24:01 26 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 3 应用程序。此应用程序通过 jQuery 请求记录。 jQuery 回调以 JSON 格式返回结果的 Controller 操作。我无法证明这一点,但我担心我的数据可能会被缓存。

我只想将缓存应用于特定操作,而不是所有操作。

是否有一个属性可以放在操作上以确保数据不会被缓存?如果不是,我如何确保浏览器每次都获取一组新的记录,而不是缓存的一组记录?

最佳答案

为确保 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]装饰你的 Controller 。或者为所有的人做这件事,你可以把属性放在你继承你的 Controller 的基类的类上(如果你有一个)就像我们在这里:

[NoCache]
public class ControllerBase : Controller, IControllerBase

如果你需要它们是不可缓存的,你也可以用这个属性装饰一些 Action ,而不是装饰整个 Controller 。

如果您的类或操作在您的浏览器中呈现时没有NoCache,并且您想检查它是否正常工作,请记住在编译更改后您需要进行“硬刷新” (Ctrl+F5) 在您的浏览器中。在您这样做之前,您的浏览器将保留旧的缓存版本,并且不会使用“正常刷新”(F5) 对其进行刷新。

关于c# - 使用属性防止在 ASP.NET MVC 中缓存特定操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011780/

26 4 0
文章推荐: jquery 数据选择器
文章推荐: sql - 在 SQL 查询之间获取多个日期范围并相应地添加数据
文章推荐: maven - 如何从 go lang 代码运行 maven 构建
文章推荐: jquery - 遍历