Информация о сеансе приложения .NET WebForms недоступна для MVC

1

Я начал с приложения 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 следующим образом через свойство сверху viz Global.SystemSettings:

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

Когда я проверяю HttpContext.Current.Session, он равен NULL.

Итак, почему коллекция Session null при доступе с контроллера WebAPI?

Мне нужно хранить информацию, связанную с сеансом пользователя в контроллере WebAPI, поэтому мне нужно сейчас хранить вещи по-другому?

ОБНОВИТЬ

Принятое решение также работает для WebAPI 1, что и используется приложением.

Теги:
asp.net-web-api
webforms

1 ответ

0
Лучший ответ

Это связано с тем, что по умолчанию для WebApi не включен Session. WebApi пытается побудить вас перейти к API-интерфейсам без апатии и RESTful.

Я настоятельно призываю вас переработать ваш дизайн без сеансов.

С учетом этого вы можете включить сеанс в WebApi 2, добавив его в Global.asax

protected void Application_PostAuthorizeRequest() 
{
    System.Web.HttpContext.Current.SetSessionStateBehavior(
        System.Web.SessionState.SessionStateBehavior.Required);
}
  • 2
    Я слышал вас об отсутствии сессий, к сожалению, это приложение уже несколько лет позади и довольно активно использует сессии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню