對於HttpContext.Current的一點理解


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM