【发布时间】:2020-01-29 08:47:36
【问题描述】:
我有一个用 ASP.NET Core 3.1 编写的项目。
我需要在 Singleton 服务中给 Session 设置数据:
_session.SetString("some key", "some value");
我从 DI 注入了会话对象:
public OperatorService(ILogger<OperatorService> logger,
ISession session,
IOptions<AppSettings> options)
{
this._session = session;
this._logger = logger;
this._appSettings = options.Value;
}
我调用 my 方法如下:
public void ChangeOperatorStatus(StatusChangeRequest request)
{
try
{
_session.SetString(request.Key, request.Value);
}
catch (Exception ex)
{
_logger.LogInformation($"Exception while changing status: {ex}");
}
}
但我得到以下异常:
IFeatureCollection has been disposed.\r\nObject name: 'Collection'.
我在 Startup.cs 的 ConfigureServices 方法中添加了一些代码:
services.AddHttpContextAccessor();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
})
.AddDistributedMemoryCache();
我在 Startup.cs 的 Configure 方法中添加了app.UseSession();。
我尝试了services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 并从httpContextAccessor.HttpContext.Session 获得了会话,但我得到了同样的错误。
请帮帮我,谢谢。
【问题讨论】:
-
你从哪里得到这个异常?
-
这是 github 中的一个已关闭问题。 github.com/dotnet/aspnetcore/issues/14841
-
@John in _session.SetString(SessionKeys.UserStatus, "some value");
-
@RamilAliyev Elvin 的链接显示问题是由错误使用
HttpContextAccessor引起的。您仍然没有发布错误发生的位置。_session.SetString(SessionKeys.UserStatus, "some value");是哪里?_session是从哪里来的,尤其是在 Singleton 中? -
一个 HttpContext 是一个 single 请求的上下文。它提供对单个请求的请求、响应属性等的访问。你不能缓存它,一旦请求结束它就会失效。
标签: c# .net asp.net-core asp.net-core-3.1