c# - 基于 Session 值的 MVC OutputCache

标签 c# .net asp.net-mvc outputcache

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

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);
}

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

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

URL 相同的原因是用户作为“访客”进来,输入一些信息 (POST),这些信息经过验证并存储在 session 中,然后他们被重定向回同一页面 (现在应该根据 session 数据特定于用户)。

页面本身应该被正常缓存,因为如果“访客”访问相同的 URL,它应该每次都提供相同的“标准”页面。

是否可以通过这种方式改变缓存?

最佳答案

如果您想个性化每个用户的缓存输出,最好将位置设置为 OutputCacheLocation.Client,如下所示。更多信息 here

   [OutputCache(Duration=3600, VaryByParam="none", Location=OutputCacheLocation.Client, NoStore=true)]
   public string GetName()
   {
         return "Hi " + User.Identity.Name;
   }

关于c# - 基于 Session 值的 MVC OutputCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645615/

相关文章:

C# Func<> 和泛型

c# - 将ffmpeg流传递给c#窗口

c# - TCP 服务器的 IDuplexPipe 的示例实现

jquery - getJSON 回调未触发

c# - 将两个列表相交并返回与原始第一个字符串值的保留顺序的相似度

c# - 创建通用扩展方法时出现问题

c# - 替代 .NET 的 Uri 实现?

.net - 在 VB.NET 中使用单个属性实现多个接口(interface)

asp.net-mvc - MVC3 RTM Futures - 安装 Microsoft.Web.Mvc

c# - Controller 返回FileStreamResult时如何清除\清除模型状态错误?