asp.net - 防止在 ASP.NET MVC 中缓存 WEB API 数据
问题描述
我有一个 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;
}
}
解决方案
我也有一个 ASP.NET MVC5 应用程序,并将OutputCache
指令添加到我的常规控制器和我的 API 控制器中。我仍然有一些缓存仍在进行。在我的情况下,将缓存预防代码移动到一个中心位置似乎有帮助:到App_Start/FilterConfig.cs
'sRegisterGlobalFilters
方法:
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中删除各个指令。这样做的缺点是如果您想从任何控制器启用缓存,但我的理解是您可以通过在或级别应用不同的OutputCache
指令来覆盖全局过滤器。Controller
View
推荐阅读
- maven - 无法从两个单独的 Jenkins Maven 构建生成统一的 Allure 报告
- caching - 缓存 OpenLayers3 Tiles 服务器端
- javascript - 调试三角形打印中的空白空间 - JS
- ruby-on-rails - Rails:帮助方法在控制台和应用程序之间表现不同
- java - 从 2D ArrayList 中删除元素
- node.js - Async/Await Mongoose 并不总是正确运行
- laravel - Laravel 5.4,文件上传超时
- c - 在ncurses中将一个窗口分配给另一个窗口
- php - array_marge is very slow
- multithreading - 如果消息队列已关闭,如何在事件驱动微服务中进行处理?