我正在尝试访问作为Webform项目一部分的Controllers中的Session。所有会话变量都在ASPX页面上设置
Session["SESSION_KEY_UI_CULTURE"] = ddlLanguage.SelectedValue;
现在应客户端的API请求,我需要读取会话变量并执行任务,但会话始终为空。
[RoutePrefix("api/accounts")]
public class AccountsController : ApiController
{
[Route("config")]
[HttpGet]
public IHttpActionResult GetCompanyConfig()
{
if(HttpContext.Current.Session != null)
{
//Session is always NULL
}
return Ok();
}
}
我尝试在WebConfig文件中删除并添加SessionStateModule
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
答案 0 :(得分:1)
ASP.NET Web Api用于定义为无状态的REST服务。将Session添加回Web Api会破坏使用RESTful API的目的。 您可能需要重新考虑要达到的目标,并找到另一种解决问题的方法。
但是有一种方法可以做你想要的事情:
尽管如此,要激活会话,请将以下内容添加到您的Global.asax
C#
protected void Application_PostAuthorizeRequest() {
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
VB
Sub Application_PostAuthorizeRequest()
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required)
End Sub