【发布时间】:2016-06-15 19:33:10
【问题描述】:
我目前正在使用ConcurrentDictionary 来保存已通过我的 API 进行身份验证的登录名集合。我这样做是为了防止来自其他 Web 客户端的重复登录(系统架构的要求)。如果用户使用已经“登录”的登录名进行身份验证,他们可以选择......
- 继续,之前的登录将失效
- 取消,当前会话将被注销
我正在使用ConcurrentDictionary,因为它应该是线程安全的,这在多个客户端访问 API 的环境中很重要。
我要问的是是否需要 ConcurrentDictionary,因为我在删除集合中与给定键匹配的所有项目时遇到了麻烦。在这种情况下是否需要ConcurrentDictionary?如果没有,那么简单的Dictionary 就足够了吗?如果没有,并且需要ConcurrentDictionary,是否有一种方法可以删除与给定键匹配的所有条目?我只能看到TryRemove(),它似乎只删除了一个条目。
【问题讨论】:
-
只能有一个条目与
ConcurrentDictionary中的键匹配。 -
我的意思不是不尊重,但你的身份验证方法让我担心。像 web-api 这样的 Web 技术注定是无状态的。您不应该跟踪谁在内存中登录。我会完全重新考虑身份验证/授权过程。可能查一些现有的框架和例子,有很多。
-
@Lee - 我什至没有意识到这一点。也许这就是为什么没有方法可以全部删除的原因。
-
@Igor - 我很不同意你的看法。 API 可以是你需要的任何东西。它似乎对我们很有效。
-
@webworm,不,标准字典不是线程安全的
标签: c# asp.net-web-api concurrentdictionary