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);