I have the following static method inside a static class. My question is it safe to use HttpContext.Current.Response inside a static method? I want to be 100% sure that it is thread safe and is only associated with the calling thread.. Does anybody know the answer?
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;
}
}
Yes its quite safe. HttContext.Current will acquire the current HttpContext from the thread that is executing.
Its a common technique and saves you from having to pass the context object around like "Tramp data".
HTTPContext.Current is static, so the fact that you're calling it from a static method is irrelevant. What is relevant is that HTTPContext.Current is implemented in such a way that it returns the current thread's HTTP Context, if it exists.
It's not clear what do you exactly mean by thread-safety. Yes, HttpContext.Current
returns the HttpContext
object associated with the current thread. Note that if you call the function on a thread except the one currently processing the request (for example, in an async function call), you wouldn't be able to access the HttpContext
object you want.
Another approach is to have the context object passed as an argument to your function.