Как я могу удалить кэш вывода для каждого пользователя в ASP.NET MVC? - PullRequest
5 голосов
/ 03 марта 2011

Я использую VaryByCustom для создания кэша вывода для каждого браузера и для каждого пользователя:

[OutputCache(Duration = 6000, VaryByParam = "*", VaryByCustom="browser;userName")]

(я переопределил GetVaryByCustomString(), чтобы сделать эту работу.)

Мне нужно иметь возможность удалить кэш-память одного пользователя, при этом, по возможности, не аннулировать кэш-память разных пользователей. Я прочитал о HttpResponse.RemoveOutputCacheItem(), но это работает путем удаления кэша вывода на основе пути. Есть ли способ сделать это на основе строки VaryByCustom?

Ответы [ 3 ]

1 голос
/ 09 декабря 2013

Вы можете воспользоваться преимуществом VaryByCustom свойства в [OutputCache], переопределив HttpApplication.GetVaryByCustomString и отметив HttpContext.Current.User.IsAuthenticated.

. Это то, что я создам в файле Global.asax.cs:

public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom == "UserName")
        {
            if (context.Request.IsAuthenticated)
            {
                return context.User.Identity.Name;
            }
            return null;
        }

        return base.GetVaryByCustomString(context, custom);
    }

А затем используйте его в атрибуте OutputCache:

[OutputCache(Duration = 10, VaryByParam = "none", VaryByCustom = "UserName")]
public ActionResult Profiles()
{
    //...
}

, но будьте осторожны, чтобы в этом случае имя пользователя было неизменным!

0 голосов
/ 05 марта 2011

возможно, используйте

Response.Cache.SetVaryByCustom(string custom);

в ActionFilter, вы можете создать строку, включая версию браузера и пользователя

0 голосов
/ 04 марта 2011

Почему бы не указать пользователя в параметрах, и тогда это будет для каждого пользователя через VaryByParam.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...