OuputCache,有什么方法可以区分登录用户和匿名用户

时间:2018-08-17 09:31:03

标签: .net asp.net-mvc outputcache

我有一个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来保持性能提升,但是它足够聪明地知道经过身份验证/未经身份验证的差异吗?

1 个答案:

答案 0 :(得分:0)

您可以使用“ 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"
    }

每个用户都有自己的唯一缓存版本版本,并且也为“匿名”用户创建了一个缓存版本。