HttpContext.Current.Response внутри статического метода - PullRequest
20 голосов
/ 13 ноября 2009

У меня есть следующий статический метод внутри статического класса. Мой вопрос безопасно ли использовать HttpContext.Current.Response внутри статического метода? Я хочу быть на 100% уверенным, что это потокобезопасно и связано только с вызывающим потоком. Кто-нибудь знает ответ?

    public static void SetCookie(string cookieName, string cookieVal, System.TimeSpan ts)
    {
        try
        {
            HttpCookie cookie = 
                new HttpCookie(CookiePrefix + cookieName) 
                    {Value = cookieVal, Expires = DateTime.Now.Add(ts)};
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
        catch (Exception)
        {
            return;
        }
    }

Ответы [ 3 ]

33 голосов
/ 13 ноября 2009

Да, это довольно безопасно. HttContext.Current получит текущий HttpContext из потока, который выполняется.

Это обычная техника, которая избавляет вас от необходимости передавать объект контекста, например, "данные бродяги".

13 голосов
/ 13 ноября 2009

HTTPContext.Current является статическим, поэтому тот факт, что вы вызываете его из статического метода, не имеет значения. Важно то, что HTTPContext.Current реализован таким образом, что он возвращает контекст HTTP текущего потока, если он существует.

6 голосов
/ 13 ноября 2009

Непонятно, что именно вы подразумеваете под безопасностью потоков. Да, HttpContext.Current возвращает объект HttpContext, связанный с текущим потоком. Обратите внимание, что если вы вызовете функцию в потоке, за исключением того, который в данный момент обрабатывает запрос (например, при вызове асинхронной функции), вы не сможете получить доступ к нужному объекту HttpContext.

Другой подход - передать объект контекста в качестве аргумента вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...