代码之家  ›  专栏  ›  技术社区  ›  Kevin Bradshaw

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

  •  0
  • Kevin Bradshaw  · 技术社区  · 7 年前

    我有一个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)
    {
    

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jon Ryan    7 年前

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

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

    推荐文章