繁体   English   中英

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

[英]How are Static Variables shared in a Web Session

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

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

public static class SystemProperties
{
    public static int currentContactID;
}

当访问WebApi时,我从呼叫的Http标头中剥离ContactID并将其设置为SystemProperties.CurrentContactID。

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

我发现并发webapi调用时出现问题,currentContactID变得混乱​​起来。

我的问题是,静态类成员如何在调用会话之间共享? 穿着最好的衣服会排在最后吗?如果前一个人仍在那儿,他们会被新人搞砸,新人会用其详细信息覆盖变量?

我应该使用其他方法来存储这些详细信息吗?

提前致谢

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

HttpContext.Current.Items["currentContactID"] = value

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

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

是的,您应该使用其他方法。

使用Web API时,请求以HttpRequestMessage的形式出现。 您可以实现HTTP消息处理程序(从DelegatingHandler继承),然后从HTTP标头中剥离CurrentContactID。 您还可以使用已剥离的CurrentContactID值,并将其添加到HttpRequestMessage对象的Properties字典中。

这是有关实现HTTP消息处理程序的文章: http : //www.asp.net/web-api/overview/working-with-http/http-message-handlers

这是有关HttpRequestMessage的Properties属性的文章: http : //msdn.microsoft.com/zh-cn/library/system.net.http.httprequestmessage.properties.aspx

请记住,控制器也可以使用HttpRequestMessage的Properties属性,这就是为什么它适合代替静态类或会话使用的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM