我有一个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来保持性能提升,但是它足够聪明地知道经过身份验证/未经身份验证的差异吗?
答案 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"
}
每个用户都有自己的唯一缓存版本版本,并且也为“匿名”用户创建了一个缓存版本。