MVC OutputCache基于会话值

har*_*don 5 .net c# asp.net-mvc outputcache

是否可以根据会话中的某些值改变MVC中的输出缓存?我已经阅读了很多关于使用varybycustom功能并覆盖Global.asax中的GetVaryByCustomString的内容,但此时会话不可用.

public override string GetVaryByCustomString(HttpContext context, string custom)
{
     if (custom == "somekey") 
         //Want to check the session here (but it isn't available).

     return base.GetVaryByCustomString(context, custom);
}
Run Code Online (Sandbox Code Playgroud)

我理解这是因为会话直到稍后在请求管道中才创建.

我担心的是,如果不根据用户的会话改变缓存,页面(根据用户在会话中的内容而改变,具有特定于该用户的其他HTML等)将被缓存(因为URL是相同的)并且由我们的负载均衡器,代理服务器等提供服务,然后在页面上与其他人的会话信息一起提供给其他请求!

URL相同的原因是用户以"访客"身份进入,输入一些信息(POST),这会被验证并存储在会话中,然后将它们重新定向回同一页面(现在应该是根据会话数据特定于用户).

页面本身应该正常缓存,因为如果"访客"访问相同的网址,它应该每次都提供相同的"标准"页面.

有可能以这种方式改变缓存吗?

Jes*_*lam 0

输出缓存 ActionFilter有帮助吗?

或者,也许您可​​以将视图重构为布局页面以及匿名和经过身份验证部分的部分视图,然后使用部分缓存。