2

我已经使用 NuGet 中的 Microsoft RedisOutputCacheProvider成功实现了 Azure Redis 缓存,它对一般页面按预期工作。

[ChildActionOnly]
[ChildActionOutputCache(CacheProfile.StaticQueryStringComponent)]
public ActionResult Show(int id)
{
    // some code
}

但是,我似乎无法让它适用于子动作。在使用 Redis Cache 之前,它使用默认的 OutputCacheProvider 工作。

有没有人有任何想法,或者这只是一个限制?

提前致谢

4

1 回答 1

2

在您的Global.asax.cs中,设置与 Redis 对话的自定义子操作输出缓存:

protected void Application_Start()
{
    // Register Custom Memory Cache for Child Action Method Caching
    OutputCacheAttribute.ChildActionCache = new CustomMemoryCache("My Cache");
}

此缓存应派生自MemoryCache并实现以下成员:

/// <summary>
/// A Custom MemoryCache Class.
/// </summary>
public class CustomMemoryCache : MemoryCache
{
    public CustomMemoryCache(string name)
        : base(name)
    {

    }
    public override bool Add(string key, object value, DateTimeOffset absoluteExpiration, string regionName = null)
    {
        // Do your custom caching here, in my example I'll use standard Http Caching
        HttpContext.Current.Cache.Add(key, value, null, absoluteExpiration.DateTime,
            System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);

        return true;
    }

    public override object Get(string key, string regionName = null)
    {
        // Do your custom caching here, in my example I'll use standard Http Caching
        return HttpContext.Current.Cache.Get(key);
    }
}

更多信息见我的博文

于 2015-02-26T18:06:17.710 回答