2012-03-28 6 views
6

Czy istnieje sposób, aby użyć OutputCache przypisują buforować wyniki z tylko wylogowanie użytkowników i przewartościowania dla zalogowanych użytkowników przykład:OutputCache mvc3 tylko wylogować buforowanie użytkownika

Co chciałbym

[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 
} 

Odpowiedz

8

Możesz użyć właściwości VaryByCustom w [OutputCache].

Następnie należy zastąpić HttpApplication.GetVaryByCustomString i sprawdzić HttpContext.Current.User.IsAuthenticated.

  • Powrót "NotAuthed" lub podobne, jeśli nie uwierzytelniony (uaktywnienie cache)
  • Guid.NewGuid().ToString() do unieważnienia pamięci podręcznej
+1

To bardzo czego mi brakuje dziękuję. Nie udało mi się zrealizować buforowania o wartości zerowej. – maxfridbe

+0

Nie wiedziałem, że był dostępny. Dziękuję :) –

+0

@maxfridbe: Nie zapomnij przyjąć odpowiedzi. – jgauffin

4

To jak ja realizowane wyżej.

W 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); 
} 

Wykorzystanie w Output atrybut pamięci podręcznej:

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