ASP.NET Web API – 请求特定的全局变量

当我收到Web API请求时,我想创建一个变量,在请求的生命周期中,每个类都可以访问该变量。 我想让它像任何类的App.User一样以静态属性的forms被访问。 但我不希望在处理请求后保留它,所以我猜SessionState不是一个选项。 这样做的正确方法是什么?

编辑:它也需要线程安全。

正如Igor所指出的,一种选择是使用dependency injection和参数传递来使您的“全局”变量可以访问所有需要它的东西。

但是如果你真的想使用静态属性,那么你可以使用HttpContext.Items属性来存储与当前请求有关的临时数据:

 public class App { public static IUser User { get { return (IUser)HttpContext.Current.Items["User"]; } set { HttpContext.Current.Items["User"] = value; } } } 

第三个选项(我推荐)是使用ThreadStatic属性支持的静态字段:

 public class App { [ThreadStatic] private static IUser user; public static IUser User { get { return user; } set { user = value; } } } 

此选项的优点是它不依赖于System.Web。 但是,它在您的控制器是同步的情况下有效,并且如果您使用async ,它将会中断。

HttpContext.Items专门用于此目的。

你放在那里的任何东西都会存在当前请求的生命周期,然后被拆除。