如何在 Web 会话中共享静态变量

Mat*_*att 5 c# asp.net-mvc global-variables shared-libraries asp.net-web-api

我有一个 mvc webapi 服务设置,可以从 sql server 数据库中拉取和推送数据。

在包含 webapi 的 Web 项目中,我有一个静态类,它只包含一些从 webapi 方法访问的全局变量。以下是静态类的一个非常精简的示例:

public static class SystemProperties
{
    public static int currentContactID;
}
Run Code Online (Sandbox Code Playgroud)

当访问 WebApi 时,我从调用的 Http 标头中删除 ContactID,并将 SystemProperties.CurrentContactID 设置为它。

比在 webapi 的方法中,我访问 SystemProperties.CurrentContactID 进行数据调用。

我发现当并发 webapi 调用 currentContactID 时出现问题。

我的问题是,静态类成员如何在调用会话之间共享?它会不会是最后一个穿着最好的人,如果前一个人还在那里,那么他们会被新人搞砸,他会用他们的细节覆盖变量吗?

我应该使用不同的方法来存储这些详细信息吗?

提前致谢

Sla*_*des 3

您可以使用 Current HttpContext 来存储要在 HttpRequest 的生命周期中使用的项目

HttpContext.Current.Items["currentContactID"] = value
Run Code Online (Sandbox Code Playgroud)

因此,您可以从请求标头中获取数据,并将其存储在此处,并且该数据在该用户的当前 http Web 请求期间可用。每个 http 请求都有自己的 Items 字典,因此它不会被同时请求覆盖

如果您需要在同一用户的多个请求中存储变量,则需要查看 cookie 或会话。