HttpContext.Current.Response inside a static metho

2019-02-07 22:50发布

问题:

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;
        }
    }

回答1:

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



回答2:

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.



回答3:

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.