ASP.NET Web API:如何创建跨请求的持久性集合?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.NET Web API:如何创建跨请求的持久性集合?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2579字,纯文字阅读大概需要4分钟。
内容图文
![ASP.NET Web API:如何创建跨请求的持久性集合?](/upload/InfoBanner/zyjiaocheng/684/12e56c325d9240e08c9a45203b1f7850.jpg)
我有一个Web API,提供Angular.JS Web应用程序的后端.后端API需要跟踪用户活动的状态. (示例:它需要记录用户最后一次从API检索到的内容ID)
对API的大多数访问都通过用户名/密码进行身份验证.对于这些实例,将用户状态存储在我们的数据库中对我来说很好.
但是,我们确实需要允许“访客”访问服务.对于来宾,确实需要跟踪状态,但不应长期保留(例如,会话级跟踪).我真的不需要在用户表中生成“伪用户”来存储来宾用户的状态,而无需长时间维护该状态.
我的计划是生成一个随机值,并将其作为cookie存储在客户端中. (仅用于访客-我们对经过身份验证的用户使用承载身份验证.)然后,我将使用随机值作为键将任何必要的状态存储在内存对象(例如Dictionary)中.然后,我可以定期使字典中的项目过期.如果重新启动了Web API,则丢失此数据是完全可以接受的,甚至每天在特定时间重置字典也可以接受.
我不知道如何在WebAPI中进行操作是创建字典对象,以便它在Web API调用之间持久存在.我基本上需要一个单例字典对象,该对象将在服务器运行Web API时保持其内容(除非进行计划的清除或程序性刷新)
我的想法是每次进行API调用时都将Dictionary转储到磁盘上,然后在需要时将其读回,但这不允许同时进行多个飞行中的请求.我现在能想到的唯一方法是添加另一个数据库表(guest_state或其他内容)并复制用户表,然后设置某种手动方法定期清除来宾表中的数据.
摘要:我需要的是
>一种在Web API后端中持久存储某些数据而无需访问数据库的方法
>最好将此数据存储在Dictionary对象中,这样我就可以使用随机生成的会话ID作为键,并使用一个对象来存储状态
>可以在设定的时间段后或定期清除数据(不是太频繁,可能至少需要保留6小时)
解决方法:
我使用Singleton模式找到了一个解决方案:
public static class Services
{
private static Dictionary<string, string> cache;
private static object cacheLock = new object();
public static Dictionary<string,string> AppCache
{
get
{
lock (cacheLock)
{
if (cache == null)
{
cache = new Dictionary<string, string>();
}
return cache;
}
}
}
}
public class testController()
{
[HttpGet]
public HttpResponseMessage persist()
{
HttpResponseMessage hrm = Request.CreateResponse();
hrm.StatusCode = HttpStatusCode.OK;
Services.AppCache.Add(Guid.NewGuid().ToString(), DateTime.Now.ToString());
string resp = "";
foreach (string s in Services.AppCache.Keys)
{
resp += String.Format("{0}\t{1}\n", s, Services.AppCache[s]);
}
resp += String.Format("{0} records.", Services.AppCache.Keys.Count);
hrm.Content = new StringContent(resp, System.Text.Encoding.ASCII, "text/plain");
return hrm;
}
}
似乎Services.AppCache对象成功保留了数据,直到空闲超时到期或应用程序池回收为止.幸运的是,我可以在IIS中控制所有这些操作,因此,我根据可以清除数据的时间,将应用程序移至其自己的AppPool并根据需要设置空闲超时和回收.
可悲的是,如果您无法控制IIS(或无法要求管理员为您设置设置),那么如果默认过期时间对您来说太早,则可能无法正常工作. LocalDB文件甚至平面JSON文件可能更有用.
内容总结
以上是互联网集市为您收集整理的ASP.NET Web API:如何创建跨请求的持久性集合?全部内容,希望文章能够帮你解决ASP.NET Web API:如何创建跨请求的持久性集合?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。