C# 在缓存索引操作方法时,防止在MVC中缓存布局文件

C# 在缓存索引操作方法时,防止在MVC中缓存布局文件,c#,asp.net-mvc,asp.net-mvc-4,caching,outputcache,C#,Asp.net Mvc,Asp.net Mvc 4,Caching,Outputcache,我在MVC应用程序中有许多创建视图。我已经使用[OutputCache]注释缓存了GETIndex操作方法,以便将视图存储在缓存中 我在会话中存储当前登录用户的详细信息,并在从会话读取后在布局中显示该用户的名字 问题是,因为我缓存了视图,所以布局也被缓存了。因此,即使其他用户登录,也可以看到前一个用户的名字,因为上次缓存了布局 有没有办法防止缓存布局?或者有没有其他方法可以阻止名字显示被缓存 我曾考虑过使用VaryByCustom,但我不确定在GetVaryByCustomString方法中需要

我在MVC应用程序中有许多创建视图。我已经使用
[OutputCache]
注释缓存了
GET
Index
操作方法,以便将视图存储在缓存中

我在
会话
中存储当前登录用户的详细信息,并在从
会话
读取后在布局中显示该用户的名字

问题是,因为我缓存了视图,所以布局也被缓存了。因此,即使其他用户登录,也可以看到前一个用户的名字,因为上次缓存了布局

有没有办法防止缓存布局?或者有没有其他方法可以阻止名字显示被缓存

我曾考虑过使用
VaryByCustom
,但我不确定在
GetVaryByCustomString
方法中需要重写什么

防止缓存布局的最佳方法是什么,或者根据用户改变缓存的最佳方法是什么

编辑:


我必须澄清,我正在使用自己的自定义用户管理逻辑。我在数据库中有自己的Users表,我在登录时检索相关数据并将其存储在
会话中
这里有一种方法可以使用Global.asax中的GetVaryByCustom函数

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        var varyString = string.Empty;

        if(context.User.Identity.IsAuthenticated)
        {
            varyString += context.User.Identity.Name;
        }

        return varyString;
    }

您还可以通过ajax请求获取用户信息,并使用javascript插入,这样您就不需要为每个用户重新设置页面。就我个人而言,如果用户名是唯一不同的东西,我会采用这种方法。

可能重复的@ChrisPratt并不完全相同。我没有使用默认的成员资格提供程序。我没有使用成员资格提供程序。我的数据库中有我自己的用户表和我自己的自定义逻辑,通过它们我可以获取用户数据,并在登录时将其存储在会话中。好的,当然,只需将其应用于本例即可。您可以从发送到此函数的HttpContext访问会话。