Пакет Microsoft.AspNetCore.Session
, включенный в метапакет Microsoft.AspNetCore.App
, предоставляет промежуточное программное обеспечение для управления состоянием сеанса.Чтобы включить промежуточное программное обеспечение сеанса, автозагрузка должна содержать:
- Любой из кэшей памяти IDistributedCache.Реализация IDistributedCache используется в качестве резервного хранилища для сеанса.
- Вызов
AddSession
в ConfigureServices
. - Вызов
UseSession
в Configure
.
Код:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseHttpContextItemsMiddleware();
app.UseMvc();
}
}
HttpContext.Session
доступен после настройки состояния сеанса.
HttpContext.Session
недоступен до UseSession
был вызван.
InvalidOperationException
исключение возникает, когда UseSession
вызывается после UseMvc
.
Доступ к состоянию сеанса осуществляется из класса PageModel Razor Pages или класса контроллера MVC с помощью HttpContext.Session
.Это свойство является реализацией ISession
.
Реализация ISession
предоставляет несколько методов расширения для установки и получения целочисленных и строковых значений.Методы расширения находятся в пространстве имен Microsoft.AspNetCore.Http
(добавьте оператор
using Microsoft.AspNetCore.Http;
для получения доступа к методам расширения), когда проект ссылается на пакет Microsoft.AspNetCore.Http.Extensions
.
Доступ к Httpcontext в библиотеке классов:
HttpContext
доступен в контроллерах, но для доступа к другим классам вам необходимо ввести IHttpContextAccessor
в вашем классе.Для доступа к сеансу используйте следующий код: -
var sessionValue =_context.HttpContext.Session.GetString("KeyName");
Более подробную информацию можно найти по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2