【发布时间】:2015-10-21 19:08:48
【问题描述】:
我的 Web API (2.0) 服务和 MVC (4.0) 代码在同一个 Web 应用程序中运行。我像通常的 HTTP 服务调用一样从 MVC 应用程序调用 Web API。
我在 WebApi 管道中添加了IAuthenticationFilter,因为我想在执行任何 Web Api 控制器之前进行一些与安全相关的验证。我将安全相关数据(例如 TokenId)保存在 HttpContext.Current.Session 中。例如。 HttpContext.Current.Session["TokenId"].
当我从 MVC 控制器或 WebApi 控制器访问时,Session 中保存的数据不知何故可用。但它在第一次运行过滤器时在AuthenticationFilter 中不可用,即当从 MVC 应用程序完成第一次 WebApi 调用时。
你能告诉我Session 何时被 WebApi 基础设施填充,为什么存储在 Session 中的值在第一次调用期间不可用?请注意,它们从第二次调用开始就可用!
我已经验证了Session 中有值。只是在第一次执行期间它们在过滤器中不可用。
SessionStateBehavior.Required 已从 Global.asax 的 WebApi 正确设置。
(我知道不推荐使用 Session,但我现在必须使用它。)
【问题讨论】:
-
我认为你遇到的主要问题是动作过滤器被缓存了,所以你必须依赖传递给它们的变量,这就是为什么每个人都推荐
filterContext,但这就是来自 MVC。 -
你使用任何 DI 容器吗?我认为您可以将会话注入到您的操作过滤器的构造函数中......
标签: asp.net-mvc asp.net-mvc-4 session asp.net-web-api asp.net-web-api2