启用OutputCache时会话丢失

时间:2016-03-22 17:39:40

标签: c# asp.net-mvc session caching asp.net-mvc-5

我有一个(工作)MVC应用程序,它在多个部分上使用Session属性:

return httpContext.Session[SPContextKey] as SharePointAcsContext;

(忽略这是sharepoint;此问题不是SP特定的)

在我尝试启用Outputcaching之前,这样可以正常工作:

[OutputCache (Duration =600)]
public ActionResult Select() {
  DoSelect();
}

缓存内容时,httpContext.Session变为NULL。

有没有办法保留会话数据并使用缓存?

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案。我花了一段时间才得出结论 - 如果数据被缓存 - 应该没有任何单独的代码运行。原因应该是缓存的主要目的:在数据兑现时不要运行任何代码。

这使我得出结论,导致问题的代码必须在缓存之前运行。所以“坏孩子”很容易找到。另一个属性(在本例中为AuthorizeAttribute)是之前代码中的OutputCache-Attribute仍然在缓存适用时运行但无法访问会话:

[Route("{id}")]
[UserAuth(Roles =Directory.GroupUser)]
[JsonException]
[OutputCache(Duration = 600)]
public ActionResult Select()
{
  DoSelect();
}

将UserAuth-Attribute放在OutputCache-Attribute以下解决了问题