views:

442

answers:

3

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;
  }
 }
+6  A: 

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.

Yuliy
Nice explanation, thanks
Rippo
+1  A: 

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.

Mehrdad Afshari
+1 for the async threads
Hans Kesting
+6  A: 

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".

AnthonyWJones
Excellent, thought so... I did not want to pass the context around all my methods.
Rippo