静态方法中的HttpContext.Current.Response

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;
        }
    }
3个回答

34

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

这是一种常见的技术,可以避免您像“流浪汉数据”一样传递上下文对象。


太好了,我也这么想……我不想在所有的方法中传递上下文。 - Rippo

14

HTTPContext.Current 是静态的,所以从静态方法调用它的事实是不相关的。 相关的是 HTTPContext.Current 实现了这样一种方式:如果存在,则返回当前线程的 HTTP 上下文。


7

不清楚您所说的"线程安全"具体意味着什么。是的,HttpContext.Current返回与当前线程相关联的HttpContext对象。请注意,如果您在除当前处理请求的线程之外的线程上调用该函数(例如,在异步函数调用中),您将无法访问想要的HttpContext对象。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接