Кэш Azure Redis и дочерние действия MVC

Я успешно внедрил Azure Redis Cache с помощью Microsoft RedisOutputCacheProvider от NuGet. который работает, как и ожидалось, для общих страниц.

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

Однако я не могу заставить его работать с дочерними действиями. До использования Redis Cache он работал с использованием OutputCacheProvider по умолчанию.

У кого-нибудь есть идеи, или это просто ограничение?

заранее спасибо


person Sam Gooch    schedule 26.02.2015    source источник


Ответы (1)


В своем 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);
    }
}

Дополнительная информация в моем сообщении в блоге< /а>

person Haney    schedule 26.02.2015
comment
Для меня это было отличным началом, но строка с именем key в методе Add CustomMemoryCache не совпадает со строкой, сгенерированной в методе Add в CustomOutputCacheProvider. Например, в CustomMemoryCache при вызове метода Add ключ генерируется случайным образом, в моем случае ключ был DyTdvXwzRuwozPQ4TW4atFVQjGIIO1s850zOBRPKf8s=, где, как и в методе Add CustomOutputProvider, строковый ключ генерируется правильно с помощью a2/test/authenticatedonly - person Frank Fu; 19.03.2018