在ApiController中访问WebForms ASPX页面会话

时间:2018-07-31 07:42:53

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

我正在尝试访问作为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"/>

1 个答案:

答案 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

Herehere是2个主题,它们朝着相同的方向发展,您可能希望进一步了解这些信息