我在静态类中有以下静态方法。我的问题是在静态方法中使用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;
}
}
答案 0 :(得分:33)
是的,它非常安全。 HttContext.Current将从正在执行的线程中获取当前的HttpContext。
它是一种常用技术,可以避免像“Tramp数据”一样传递上下文对象。
答案 1 :(得分:13)
HTTPContext.Current是静态的,所以你从静态方法调用它是无关紧要的。相关的是,HTTPContext.Current的实现方式是返回当前线程的 HTTP上下文(如果存在)。
答案 2 :(得分:6)
目前尚不清楚线程安全的确切含义。是的,HttpContext.Current
返回与当前线程关联的HttpContext
对象。请注意,如果在当前处理请求的线程上调用该函数(例如,在异步函数调用中),则无法访问所需的HttpContext
对象。
另一种方法是将上下文对象作为参数传递给函数。