2012-03-28 11 views
6

C'è un modo per utilizzare l'OutputCache attributo per memorizzare nella cache i risultati di soli disconnesso gli utenti e rivalutare per gli utenti registrati esempio:MVC3 OutputCache registrato solo utente caching

Quello che mi piacerebbe

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

risposta

8

È possibile utilizzare la proprietà VaryByCustom in [OutputCache].

Quindi eseguire l'override HttpApplication.GetVaryByCustomString e selezionare HttpContext.Current.User.IsAuthenticated.

  • ritorno "NotAuthed" o simili, se non autenticato (l'attivazione di cache)
  • Guid.NewGuid().ToString() per invalidare la cache
+1

Questa è la cosa che molto mi mancava grazie. Non ho realizzato il caching disabilitato nullo. – maxfridbe

+0

Non sapevo che fosse disponibile. Grazie :) –

+0

@maxfridbe: non dimenticare di accettare la risposta. – jgauffin

4

Ecco come ho implementato quanto sopra.

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

Utilizzo in uscita attributo cache:

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