防止在 ASP.NET MVC 中缓存 WEB API 数据
Posted
技术标签:
【中文标题】防止在 ASP.NET MVC 中缓存 WEB API 数据【英文标题】:prevent caching WEB API data in ASP.NET MVC 【发布时间】:2018-12-25 22:50:55 【问题描述】:我有一个 ASP.NET MVC 5 应用程序。此应用程序通过 WEB API Web 服务请求记录。 WEB API 回调一个以 JSON 格式返回结果的 exctetion 方法。我无法证明这一点,但我担心我的数据可能会被缓存。
我只想将缓存应用于特定操作,而不是所有操作。
是否有一个属性可以用于操作以确保数据不会被缓存?如果没有,我如何确保浏览器每次都获得一组新记录,而不是缓存组?
我将以下属性放在操作上以确保数据不会被缓存。但插入数据后无法正常工作。因此,在重置 IIS 后会影响更改。
[System.Web.Mvc.OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public class UserController : ApiController
[HttpPost]
[NoCache]
public List<DataModel> Get()
var result= ExtMethod.GetData();
return result;
【问题讨论】:
看起来您的 ExtMethod 是静态的。这可能是原因。 @Selçuk 是的,这是静态方法 你能添加你的 ExtMethod 类代码吗? @Selçuk 是的,我愿意 【参考方案1】:我也有一个 ASP.NET MVC5 应用程序,并将OutputCache
指令添加到我的常规控制器和我的 API 控制器中。我仍然有一些缓存仍在进行。在我的情况下,将缓存预防代码移动到中心位置似乎有帮助:App_Start/FilterConfig.cs
的 RegisterGlobalFilters
方法:
public class FilterConfig
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
// ...
filters.Add(new OutputCacheAttribute
NoStore = true,
Duration = 0,
VaryByParam = "*",
Location = System.Web.UI.OutputCacheLocation.None
);
一旦我有了它,我就可以从各种Controller
s 中删除各个指令。这样做的缺点是如果您想从任何控制器启用缓存,但我的理解是您可以通过在Controller
或View
级别应用不同的OutputCache
指令来覆盖全局过滤器。
【讨论】:
以上是关于防止在 ASP.NET MVC 中缓存 WEB API 数据的主要内容,如果未能解决你的问题,请参考以下文章