我有一个(工作)MVC应用程序,它在多个部分上使用Session属性:
return httpContext.Session[SPContextKey] as SharePointAcsContext;
(忽略这是sharepoint;此问题不是SP特定的)
在我尝试启用Outputcaching之前,这样可以正常工作:
[OutputCache (Duration =600)]
public ActionResult Select() {
DoSelect();
}
缓存内容时,httpContext.Session变为NULL。
有没有办法保留会话数据并使用缓存?
答案 0 :(得分:1)
我自己找到了解决方案。我花了一段时间才得出结论 - 如果数据被缓存 - 应该没有任何单独的代码运行。原因应该是缓存的主要目的:在数据兑现时不要运行任何代码。
这使我得出结论,导致问题的代码必须在缓存之前运行。所以“坏孩子”很容易找到。另一个属性(在本例中为AuthorizeAttribute)是之前代码中的OutputCache-Attribute仍然在缓存适用时运行但无法访问会话:
[Route("{id}")]
[UserAuth(Roles =Directory.GroupUser)]
[JsonException]
[OutputCache(Duration = 600)]
public ActionResult Select()
{
DoSelect();
}
将UserAuth-Attribute放在OutputCache-Attribute以下解决了问题