2011-03-03 16 views
5

Ben bir tarayıcı veya her kullanıcı için ayrı ayrı bir çıkış önbelleği oluşturmak için VaryByCustom kullanıyorum:ASP.NET MVC'de çıkış önbelleğini kullanıcı başına nasıl kaldırabilirim?

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

(. Bu işi yapmak için GetVaryByCustomString() geçersiz kıldık)

ben olmak gerekir Mümkünse, farklı kullanıcıların çıkış önbelleğini geçersiz kılmadan, tek bir kullanıcının çıkış önbelleğini kaldırabilir. HttpResponse.RemoveOutputCacheItem() hakkında okudum, ancak bu, yola göre çıkış önbelleğini kaldırarak çalışır. VaryByCustom dizesine göre bunu yapmak için herhangi bir yolu var mı?

cevap

0

Kullanıcı, neden parametre içermiyor ve VaryByParam üzerinden kullanıcı başına geliyor.

+0

Bu işe yarar ancak gereksiz bir sorgu dizesi parametresi eklemek istemiyorum. –

0

belki tarayıcı sürümü ve Sen HttpApplication.GetVaryByCustomString geçersiz kılarak [OutputCache] içinde VaryByCustom mülkiyet yararlanmak ve kontrol edebilirsiniz

+0

Bu aslında zaten yaptığım şey. İhtiyacım olan şey, aynı tarayıcıyı kullanıyor olsa bile, bir kullanıcının önbelleğini sıfırlayabilmektir. –

1

kullanıcı dahil dize birikebilir bir ActionFilter içinde

Response.Cache.SetVaryByCustom(string custom); 

kullanmak HttpContext.Current.User.IsAuthenticated.

Global.asax.cs dosyasında oluşturacağım şey budur:

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

ancak kullanıcı adı bu durumda değişmez olması gerektiğini dikkat:

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

Sonra OutputCache özelliğinde kullanın!

İlgili konular