OuputCache,有没有办法区分登录用户和匿名用户



我有一个MVC .net站点,我正在尝试利用OutputCache来提高性能。

/// <summary>
/// Broker View Page
/// </summary>
/// <returns></returns>
[Route("{lang}/brokers/details/{id}/{code}", Order = 1)]
[Route("brokers/details/{id}/{code}", Order = 2)]
[OutputCache(Duration = (60 * 60), VaryByParam = "none")]
public ActionResult View(int? id, string code)
{

这在第二次和随后访问网站时提供了巨大的性能提升,但我刚刚发现了一个巨大的陷阱!

如果客户端匿名访问该页面,随后登录并返回该页面,则仍会提供未经身份验证的视图(经过身份验证的客户端应看到相同的内容,但不同的标头(

有什么方法可以使用 OutputCache 来保持性能提升,但要让它足够聪明地了解经过身份验证/未经身份验证的差异?

您可以使用"VaryByCustom">

在控制器中

[OutputCache(Duration = 1000, VaryByCustom = "user")]
public ActionResult Index()
{
return View();
}

在 Global.ascx 中.cs :

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

每个用户都会获得自己唯一的缓存版本版本,并且还为"匿名"用户创建了一个缓存版本。

最新更新