string[] userInfomationSplits = HttpContext.Current.User.Identity.Name.Split(new string[] { "\\", "/" }, StringSplitOptions.None); string netBiosName = userInfomationSplits[0]; string username = userInfomationSplits[1];
ASP.NET还为它提供了一个静态属性HttpContext.Current来访问HttpContext。这个开发人员提供了很大的便利。但是有的时候我们是不能直接访问HttpContext.Current的。
对于这个对象,我们可以尝试使用如下代码:
System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext
也可以获取到HttpContext对象,也就是说HttpContext对象是存储在CallContext.HostContext中。
那有回到最前面的代码段,为什么提到它呢?原因在于我们不能在任何条件下都能获取到这个对象。当我在使用异步调用的时候,在方法中使用了该对象,但是我获取到的是Null。基于此种情况,我同样尝试了多线程,发现也不能获取到。根据我的理解应该是获取或设置与当前线程相关联的主机上下文。
那么我们在使用该对象的时候应该注意:必须加上对该对象的判空操作。如果其为空,通过其他方法获取所需要的。那我们如果一定要使用该对象的话。可以通过参数的形式在异步调用或者多线程时候将其作为参数传入。例如:
RunJobDelegate runFailoverDel = new RunJobDelegate(FunctionName); runFailoverDel.BeginInvoke(HttpContext.Current, RunJobFinishedCallback, null);