2013-04-28 170 views
3

我可以寫下如下內容(在ASP.NET網頁中使用的程序集中)嗎?寫這個是線程安全的嗎?

public static string CurrentAuthenticatedUserFromHttpRequest 
{ 
    get 
    { 
     if (HttpContext.Current.Items["AuthUser"] == null) 
     { 
      return string.Empty; 
     } 

     return HttpContext.Current.Items["AuthUser"].ToString(); //set in "TryAuthenticate" 
    } 
} 

它將成爲一個靜態只讀屬性。該值(到HttpContext.Current.Items [「AuthUser」])通過一個httphandler進行設置。

只是想知道這是如何會在多次請求執行。當多個用戶試圖訪問同一個屬性(在多個請求中)時,即使有大量請求進入時,數據是否準確?

+1

HttpContext的是每個HTTP請求,你打算怎麼反正用戶之間共享數據? – 2013-04-28 13:47:32

+0

也許我可以誤會,但是當用戶向服務器發出請求時,創建appdomain之後,然後創建HttpContext類,該類包含特定於當前應用程序請求的對象,如HttpRequest和HttpResponse對象。 HttpRequest對象包含有關當前請求的信息。 – StringBuilder 2013-04-28 13:50:51

+0

我應該問一個更好的方法。道歉。我想讓這個屬性始終返回當前的用戶信息。我不想在多個請求中分享價值。我們討論了在靜態屬性中使用HttpContext.Items(這不是線程安全的)。 – user203687 2013-04-28 13:51:41

回答

5

是的,這是線程安全的。每個線程的靜態HttpContext.Current屬性不同,並且包含線程當前正在處理的請求的上下文。