在 ApiController 中访问 WebForms ASPX 页面会话

Access WebForms ASPX Page Session in ApiController

我正在尝试访问作为 Webform 项目一部分的控制器中的会话。所有会话变量都在 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"/>

ASP.NET Web Api 用于定义为无状态的 REST 服务。将会话添加回 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

Here and here 是 2 个方向相同的主题,您可能希望查看这些主题以获取更多信息