是否可以在Web API中使用ASP.NET应用程序缓存?

时间:2013-05-13 15:18:00

标签: asp.net .net asp.net-web-api .net-4.5

例如,在ASP.NET页面中,您可以执行类似

的操作

Cache.Add({...})并通过Cache["key"]访问它。在此上下文中,Cache是​​System.Web.Caching.Cache对象。

在Web API控制器中是否有这种类型的ASP.NET应用程序级缓存?

4 个答案:

答案 0 :(得分:10)

如果您是网络托管,为什么不呢?

var context = HttpContext.Current;

if (context != null)
{
    if (context.Cache["g"] == null)
    {
        context.Cache["g"] = 9.81;
    }
}

但是你这样做会增加对ASP.NET的依赖。尽管ASP.NET Web API名称中包含ASP.NET,但Web API与主机无关。也就是说,ASP.NET / IIS不是唯一的托管选项; Web API也可以自托管。在走这条路线之前,你需要考虑一些事情。

答案 1 :(得分:10)

看看MemoryCache class。从其MSDN文档:

  

MemoryCache类与ASP.NET Cache类相似。该   MemoryCache类有许多用于访问的属性和方法   如果您使用了ASP.NET缓存,那么您将熟悉的缓存   类。 Cache和MemoryCache类之间的主要区别   是MemoryCache类已被更改为使其可用   不是ASP.NET应用程序的.NET Framework应用程序。

您可以自己创建MemoryCache的新实例,也可以通过MemoryCache.Default静态属性使用默认的AppDomain范围实例。

编辑:如果您希望使用此类型,则需要添加对System.Runtime.Caching.dll的引用。

答案 2 :(得分:0)

如果您在ASP.NET Web API中引用输出缓存。看看这个项目,

https://github.com/filipw/AspNetWebApi-OutputCache

答案 3 :(得分:0)

您需要输入

HttpContext.Current.Cache

访问实例。 Cache级别没有声明Controller属性,就像在Page上一样。

请注意,托管API的上下文需要支持缓存。