21

我在静态类中有以下静态方法。我的问题是在静态方法中使用 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;
        }
    }
4

3 回答 3

34

是的,它非常安全。HttContext.Current 将从正在执行的线程中获取当前的 HttpContext。

它是一种常用技术,使您不必像“Tramp data”那样传递上下文对象。

于 2009-11-13T09:42:21.713 回答
14

HTTPContext.Current 是静态的,因此您从静态方法调用它的事实是无关紧要的。相关的是 HTTPContext.Current 的实现方式是它返回当前线程的HTTP 上下文(如果存在)。

于 2009-11-13T09:40:35.590 回答
7

目前尚不清楚线程安全到底是什么意思。是的,HttpContext.Current返回HttpContext与当前线程关联的对象。请注意,如果您在除当前处理请求的线程之外的线程上调用该函数(例如,在异步函数调用中),您将无法访问所需的HttpContext对象。

另一种方法是将上下文对象作为参数传递给您的函数。

于 2009-11-13T09:41:56.717 回答