.NET WebForms应用程序会话信息不可用于MVC

时间:2014-12-07 06:26:37

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

我开始使用WebForms .NET 4.51应用程序。然后我将WebAPI添加到同一个应用程序中。在Session_Start()中,我创建了一个变量实例,我将其存储在会话中,如下所示:

public class Global : HttpApplication
{
        protected void Session_Start(object aSender, EventArgs aEventArgs)
        {            
            //Create an object to hold all the settings for the user in the session. This is only loaded once we 
            //have a user successfully logged in
            HttpContext.Current.Session[SYSTEM_SETTINGS_SESSION_KEY] = new SystemSettings();
        }
}

我有一个简单的属性访问器,如下所示:

public class Global : HttpApplication
{
  public static SystemSettings SystemSettings
  {
            get
            {
                if (HttpContext.Current == null)
                    return null;

                return HttpContext.Current.Session[SYSTEM_SETTINGS_SESSION_KEY] as SystemSettings;
            }
        }
}

当我从代码访问该属性时,除了,当我尝试从WebAPI控制器中执行此操作时,通过上面的属性 Global.SystemSettings < / EM>:

public class EmailActivitiesController : ApiController
{
  emailBody = EmailToClientsTemplateBuilderHelper.TemplateContentBuild(emailBody, Global.SystemSettings);
} 

当我检查 HttpContext.Current.Session 时,它是 NULL

那么为什么从WebAPI控制器访问时Session集合为空?

我需要在WebAPI控制器中存储使用与用户会话相关的信息,所以我现在需要以不同方式存储内容吗?

更新

已接受的解决方案也适用于WebAPI 1,这是应用程序正在使用的。

1 个答案:

答案 0 :(得分:0)

这是因为 WebApi 默认情况下未启用Session WebApi 正在努力鼓励您转向无状态HTTP RESTful API

我强烈建议您在没有会议的情况下重新设计。

有了这个说法,你可以通过将它添加到Global.asax

来启用WebApi 2中的Session
protected void Application_PostAuthorizeRequest() 
{
    System.Web.HttpContext.Current.SetSessionStateBehavior(
        System.Web.SessionState.SessionStateBehavior.Required);
}