首页 > 解决方案 > 防止在 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.netasp.net-mvcweb-servicesasp.net-web-apiasp.net-mvc-5

解决方案


我也有一个 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指令来覆盖全局过滤器。ControllerView


推荐阅读