MVC3 пользовательский выходной кэш - PullRequest
5 голосов
/ 08 апреля 2011

Я бы хотел использовать кеширование в своем приложении, но возвращаемые данные относятся к зарегистрированному пользователю.Я не могу использовать ни одно из готовых правил кэширования, когда мне нужно варьироваться в зависимости от пользователя.

Может ли кто-нибудь указать мне правильное направление при создании пользовательского атрибута кэширования.Из контроллера я могу получить доступ к пользователю из Thread.CurrentPrincipal.Identity; или частному члену контроллера, который я инициализирую в конструкторе контроллера _user

Спасибо.

Ответы [ 3 ]

10 голосов
/ 08 апреля 2011

Вы можете использовать VaryByCustom.В Global.asax переопределите метод GetVaryByCustomString:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg == "IsLoggedIn")
    {
         if (context.Request.Cookies["anon"] != null)
         {
              if (context.Request.Cookies["anon"].Value == "false")
              {
                   return "auth";
              }
              else
              {
                   return "anon";
              }
          }
          else
          {
             return "anon";
          }
    }
    else
    {
        return base.GetVaryByCustomString(context, arg);
    }
}

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

[OutputCache(CacheProfile = "MyProfile")]
public ActionResult Index()
{
   return View();
}

и в файле web.config:

<caching> 
    <outputcachesettings>             
        <outputcacheprofiles> 
            <clear /> 
            <add varybycustom="IsLoggedIn" varybyparam="*" duration="86400" name="MyProfile" /> 
        </outputcacheprofiles> 
    </outputcachesettings> 
</caching>
1 голос
/ 08 апреля 2011

Атрибут Authorize имеет несколько интересных вещей, касающихся кеширования для авторизованных и неавторизованных пользователей.Вы можете извлечь его логику и изменить его для кэширования для каждого авторизованного пользователя, а не просто для каждого - «пользователь авторизован».

Ознакомьтесь с этим сообщением:

Можнокто-нибудь объяснит мне этот блок кода ASP.NET MVC, пожалуйста?

0 голосов
/ 08 апреля 2011

Вы должны использовать OutputCache.VaryByCustom Свойство , чтобы указать пользовательскую переменную строку. И чтобы использовать его, вы должны переопределить метод в вашем Global.asax

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
  if(arg.ToLower() == "currentuser") 
  { 
    //return UserName;
  } 
  return base.GetVaryByCustomString(context, arg); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...