2013-04-28 171 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属性不同,并且包含线程当前正在处理的请求的上下文。