我很享受ASP.NET的Glimpse网络诊断平台,并希望将其部署到生产中以捕获有关最终用户互动的数据,以帮助进行故障排除。显然,我想锁定访问权限,因此不只是任何人都可以访问Glimpse捕获的所有数据。
我已经实现了GlimpseSecurityPolicy(IRuntimePolicy的一个实例),并通过调试断点确认,当我在我的网站上请求页面时,会调用Execute方法。
问题是我无法查询与当前HttpContext关联的会话。我可以通过调用policyContext.GetHttpContext()
来获取上下文的实例。 ..但该上下文对象具有null Session
属性。如果通过HttpContext.Current
检索,该属性也为null。
当访问我的主应用程序代码中的当前上下文(通过HttpContext.Current
)时,会填充Session
属性,我可以很好地与它进行交互。
所以我有两个相关的问题:
Session
属性未填充?Session
? 如果有帮助,我在运行ASP.NET MVC 5.2的网站上运行Glimpse 1.8.5。我还离开了IRunTimePolicy ExecuteOn
属性,返回默认的return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource;
。
答案 0 :(得分:4)
原因是你的IRuntimePolicy
实际上正在执行到管道的后期。如您所说,您保留了ExecuteOn
属性的默认值,会话在RuntimeEvent
之前关闭。
如果您将ExecuteOn
的值更改为RuntimeEvent.BeginSessionAccess | RuntimeEvent.ExecuteResource
,则Session
实施中应该可以使用IRuntimePolicy
属性。
关于RuntimeEvent.ExecuteResource
,只有当您的IRuntimePolicy
实际用于强制执行资源访问时才需要此{{1}},请参阅this blog post以获取更多详细信息。因此,如果情况并非如此,那么您也可以将其删除。