如何在 Web 会话中共享静态变量
本文关键字:共享 静态 变量 会话 Web | 更新日期: 2023-09-27 18:33:28
我有一个 mvc webapi 服务设置,它从 sql Server 数据库中提取和推送数据。
在保存 webapi 的 Web 项目中,我有一个 Static 类,它只保存一些从 webapi 方法访问的全局变量。下面是静态类的一个非常精简的示例:
public static class SystemProperties
{
public static int currentContactID;
}
当访问WebApi时,我从调用的Http标头中删除ContactID,并为其设置SystemProperties.CurrentContactID。
比在webapi的方法中,我访问SystemProperties.CurrentContactID进行数据调用。
我发现当有并发的webapi调用时,当前联系人ID被混淆了。
我的问题是,静态类成员如何在调用会话之间共享?在最好的着装中,它会是最后一个,如果前一个人还在那里,那么他们会被新人搞砸,新人会用他们的详细信息覆盖变量吗?
我应该使用其他方法来存储这些详细信息吗?
提前致谢
您可以使用当前 HttpContext 来存储要在 HttpRequest 的整个生命周期中使用的项目
HttpContext.Current.Items["currentContactID"] = value
因此,您可以从请求标头中获取数据,并将其存储在此处,它将在该用户的当前 http Web 请求期间可用。每个 http 请求都有自己的项目字典,因此不会被同时请求覆盖
如果您需要在针对同一用户的多个请求中存储变量,则需要查看 cookie 或会话。
是的,您应该使用不同的方法。
使用 Web API,请求以 HttpRequestMessage 的形式出现。您可以实现一个 HTTP 消息处理程序(继承自 DemissionatingHandler(,并从那里从 HTTP 标头中删除 CurrentContactID。您还可以获取已去除的 CurrentContactID 值,并将其添加到 HttpRequestMessage 对象属性字典中。
以下是有关实现 HTTP 消息处理程序的文章:http://www.asp.net/web-api/overview/working-with-http/http-message-handlers
下面是有关 HttpRequestMessage 的属性属性的文章:http://msdn.microsoft.com/en-us/library/system.net.http.httprequestmessage.properties.aspx
请记住,HttpRequestMessage 上的属性属性也可以在控制器中使用,这就是为什么它适合用于代替静态类或会话的原因。