防止在 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.csRegisterGlobalFilters 方法:

public class FilterConfig

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    
        // ...
        filters.Add(new OutputCacheAttribute
        
            NoStore = true,
            Duration = 0,
            VaryByParam = "*",
            Location = System.Web.UI.OutputCacheLocation.None
        );
    

一旦我有了它,我就可以从各种Controllers 中删除各个指令。这样做的缺点是如果您想从任何控制器启用缓存,但我的理解是您可以通过在ControllerView 级别应用不同的OutputCache 指令来覆盖全局过滤器。

【讨论】:

以上是关于防止在 ASP.NET MVC 中缓存 WEB API 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存数据库表以防止在 Asp.net C# mvc 中出现许多数据库查询

Asp.Net中MVC缓存详解

asp.net mvc - 缓存

ASP.NET MVC:如何防止会话锁定?

ASP.NET MVC 视图和控制器输出缓存

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache