2013-04-28 2 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-запроса, как вы собираетесь делиться данными между пользователями в любом случае? –

+0

Возможно, я могу ошибаться, но когда пользователь делает запрос на сервер, после создания appdomain создается класс HttpContext, класс содержит объекты, специфичные для текущего запроса приложения, такие как объекты HttpRequest и HttpResponse. Объект HttpRequest содержит информацию о текущем запросе. – StringBuilder

+0

Я должен был спросить лучше. Извиняюсь. Я хотел, чтобы это свойство всегда возвращало текущую информацию пользователя через текущий запрос. Я не пытаюсь поделиться ценностями между несколькими запросами. Мы обсуждали использование HttpContext.Items (которое не является потокобезопасным), используемое в статическом свойстве. – user203687

ответ

5

Да, это потокобезопасное. Статическое свойство HttpContext.Current отличается в каждом потоке и содержит контекст для запроса, который обрабатывается потоком.

Смежные вопросы