1

С .NET 4.6.1 Я хочу использовать Sessionstate в библиотеке классов, что-то вроде:ASP.NET 5/MVC 6, Как использовать сеанс в библиотеке классов?

public static void SetUserId() 
    { 
     HttpContext.Current.Session["userId"] = 1; 
    } 

но когда я называю этот метод он бросает исключение «Произошло необработанное исключение при обработке запроса.» > "NullReferenceException: ссылка на объект не установлена ​​в экземпляр объекта." У меня есть ссылка на system.Web в моей библиотеке классов. В .NET 4 я могу сделать это в безопасности. Но это проблема в .NET 4.6.1. Как я могу это решить? Благодаря

+1

Это должно быть хорошим признаком того, что вы делаете это неправильно, если вам нужно получить доступ к идентификатору сеанса таким образом в библиотеке классов – Tseng

+0

, что не так? У меня есть проект из .NET 4.0, и он работает хорошо. проблема возникает, когда я перешел на .NET 4.6.1 –

+0

Хорошо, возможно, проверить фактическое исключение? – CodeCaster

ответ

1

Это null по умолчанию, концепции вождения ASP.NET ядро ​​1,0 является подключаемым промежуточным программным обеспечением. Вам необходимо явно указать сеанс.

Вы должны убедиться, что в project.json существуют как зависимости Microsoft.Extensions.Caching.Memory, так и . Затем в Startup.cs добавить следующее:

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddMvc(); 
    services.AddCaching(); 
    services.AddSession(options => { 
      options.IdleTimeout = TimeSpan.FromMinutes(30); 
      options.CookieName = ".MyApplication"; 
     }); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    app.UseSession(); 

    // Removed for brevity... 
} 

Подробная статья here. Это должно быть все, что вам нужно.

Update

Избегайте попытки использовать HttpContext.Current вне веб-приложения. Это предназначено только в контексте конвейера HTTP-запроса/ответа. Предпочтительно использовать абстракции для достижения желаемых взаимодействий, которые вы ищете.

Мне нужно, чтобы вы предоставили больше исходного кода, чтобы предоставить явный пример.

+0

Session Stae доступен в моем приложении ASP.NET. Моя проблема находится внутри библиотеки классов. Я обращаюсь к сеансам в своем приложении ASP.NET, но не в библиотеке классов. В .net 4.0 у меня не было такой проблемы. исключение возникает, когда я перешел на .NET 4.6.1. Кстати, у нас нет библиотеки startup.cs внутри библиотеки классов. –

+0

для обновления. Как получить доступ к состоянию вашего приложения в библиотеке классов? вместо сеансов, возможно, мы используем: сервис wep? Общая память ? база данных? Обратите внимание, что я не хочу передавать параметры из веб-приложения в библиотеку классов, так как он не является свободным кодом. –

+0

Али - вы абстрагируетесь от этого. Если вам нужна текущая сессия в вашей библиотеке классов, передайте ее как аргумент в конструкторе. –

Смежные вопросы