Glimpse - 如何在IRuntimePolicy中访问HttpContext.Session

时间:2014-07-21 14:19:37

标签: asp.net asp.net-mvc session glimpse

我很享受ASP.NET的Glimpse网络诊断平台,并希望将其部署到生产中以捕获有关最终用户互动的数据,以帮助进行故障排除。显然,我想锁定访问权限,因此不只是任何人都可以访问Glimpse捕获的所有数据。

我已经实现了GlimpseSecurityPolicy(IRuntimePolicy的一个实例),并通过调试断点确认,当我在我的网站上请求页面时,会调用Execute方法。

问题是我无法查询与当前HttpContext关联的会话。我可以通过调用policyContext.GetHttpContext()来获取上下文的实例。 ..但该上下文对象具有null Session属性。如果通过HttpContext.Current检索,该属性也为null。

当访问我的主应用程序代码中的当前上下文(通过HttpContext.Current)时,会填充Session属性,我可以很好地与它进行交互。

所以我有两个相关的问题:

  • 为什么Session属性未填充?
  • 如何从Glimpse IRuntimePolicy内部访问当前Session

如果有帮助,我在运行ASP.NET MVC 5.2的网站上运行Glimpse 1.8.5。我还离开了IRunTimePolicy ExecuteOn属性,返回默认的return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource;

1 个答案:

答案 0 :(得分:4)

原因是你的IRuntimePolicy实际上正在执行到管道的后期。如您所说,您保留了ExecuteOn属性的默认值,会话在RuntimeEvent之前关闭。

如果您将ExecuteOn的值更改为RuntimeEvent.BeginSessionAccess | RuntimeEvent.ExecuteResource,则Session实施中应该可以使用IRuntimePolicy属性。

关于RuntimeEvent.ExecuteResource,只有当您的IRuntimePolicy实际用于强制执行资源访问时才需要此{{1}},请参阅this blog post以获取更多详细信息。因此,如果情况并非如此,那么您也可以将其删除。