我有一个 ServiceStack 4 API 项目和一个 MVC 5 Web 项目,我希望他们共享用户的会话数据。
两个项目都已配置为使用相同的 Redis 实例作为缓存。
我的 MVC 控制器继承自 ServiceStackController。
会话是由 API 创建的(我可以看到返回的 cookie 并通过会话 id 查询对象的 Redis)。
我苦苦挣扎的地方是 MVC 项目如何知道会话 ID。最初我认为 JsonServiceClient 上的 ShareCookiesWithBrowser 可能会起作用,但似乎没有。
因此,我向 JsonServiceClient 添加了请求和响应过滤器,以将网站的 cookie 添加到 API 请求,并将 API 响应 cookie 添加到网站响应 cookie。这似乎在 API 调用和 Web 请求 ss-id 和 ss-pid cookie 匹配的意义上起作用,并且会话对象在 Redis 中可用。不幸的是,当我调用 MVC 控制器上的 UserSession 属性(来自 ServiceStackController 基础)时,会引发 NullReferenceException。
如果有人能让我知道我错过了什么或做错了什么,那将不胜感激。
更新
刚刚发现 ServiceStackController 上的 Cache 属性为空。我猜它通常是由 Funq 注入的属性,但我们使用的是 SimpleInjector 并避免了属性注入。
很高兴知道我是否必须通过 JsonServiceClient 手动来回传递 cookie。在像 ServiceStack 这样经过深思熟虑的事情上,它似乎有点老套——我仍然忍不住想我错过了一些东西。
谢谢,
史蒂夫。