【问题标题】:Web Api 2 SessionWeb API 2 会话
【发布时间】:2014-03-26 19:16:34
【问题描述】:

我无法从 web api 2 中获取会话数据。我已验证 cookie 正在 fiddler 中发送。

我知道 web api 2 的最佳实践是无状态的,但由于项目的要求,现在必须是有状态的。

我已经尝试过这个链接。 WebAPI 2 attribute routing enable session state

var session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current)

通过上述解决方案,我在该函数上得到了一个空异常。

我还尝试通过修改路由中的请求处理程序来复制旧 Web api 中的执行方式,但这在 web api 2 中不可用。

我目前在 mvc5 中设置了一些会话变量。这有效并且会话保持不变,但是每当我在 web api 2 中尝试使用会话时,以下为空。

HttpContext.Current.Session

【问题讨论】:

  • 您不仅需要确认cookie已发送;您需要确认它是在 MVC 应用程序中使用的 same 会话 ID cookie。我敢打赌你有两个不同的会话 ID。
  • 它们没有什么不同。我还验证了它们是相同的 sessionID。
  • @JohnSaunders 我遇到了你所说的情况——我得到了不同的会话 ID。为什么会这样?

标签: c# asp.net session asp.net-web-api asp.net-web-api2


【解决方案1】:

添加

protected void Application_PostAuthorizeRequest() 
{
    System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}

到 global.asax

【讨论】:

  • Sweet 是一种享受。这可以在使用 Redis 或其他东西的网络场中的 Windows Azure 网站上运行吗?
  • 我没有触发此事件?
  • 我不确定我是否测试正确,但对我来说,在 mvc 控制器和 api 控制器中检索时 sessionId 是不同的,这对我来说毫无用处。
【解决方案2】:

如果 PostAuthorizeRequest 不起作用,请尝试 BeginRequest。

【讨论】:

  • 我认为他在谈论@Dejo 的答案
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2017-01-09
相关资源
最近更新 更多