outputcache mvc3 только вышел из системы пользовательского кэширования - PullRequest
6 голосов
/ 28 марта 2012

Есть ли способ использовать атрибут OutputCache для кэширования результатов только для пользователей, вышедших из системы, и переоценки для примера для пользователей, вошедших в систему:

Что бы я хотел

[OutputCache(onlycacheanon = true)]
public ActionResult GetPhoto(id){
   var photo = getPhoto(id);
   if(!photo.issecured){
      return photo...
   }
   return getPhotoOnlyIfCurrentUserHasAccess(id);
   //otherwise return default photo so please don't cache me
}

Ответы [ 2 ]

8 голосов
/ 28 марта 2012

Вы можете использовать свойство VaryByCustom в [OutputCache].

Затем переопределите HttpApplication.GetVaryByCustomString и установите флажок HttpContext.Current.User.IsAuthenticated.

  • Возвращает "NotAuthed" или аналогичный, если не аутентифицирован (активация кеша)
  • Guid.NewGuid().ToString() для аннулирования кэша
4 голосов
/ 17 мая 2012

Вот как я это реализовал.

В Global.asax.cs:

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

    return base.GetVaryByCustomString(context, custom);
}

Использование в атрибуте кэша вывода:

 [OutputCache(Duration = 30, VaryByCustom = "UserId" ...
 public ActionResult MyController()
 {
    ...
...