我收到了这个信息:
System.ObjectDisposedException: 无法访问已处理的对象。造成此错误的一个常见原因是处理从依赖注入解析的上下文,然后稍后尝试在应用程序的其他位置使用相同的上下文实例。如果您正在调用Dispose()方法释放上下文或将上下文包装在using语句中,则可能会发生此情况。如果使用依赖注入,请让依赖注入容器处理上下文实例的释放。
控制器:
System.ObjectDisposedException: 无法访问已处理的对象。造成此错误的一个常见原因是处理从依赖注入解析的上下文,然后稍后尝试在应用程序的其他位置使用相同的上下文实例。如果您正在调用Dispose()方法释放上下文或将上下文包装在using语句中,则可能会发生此情况。如果使用依赖注入,请让依赖注入容器处理上下文实例的释放。
控制器:
[HttpGet]
public IActionResult GetAllTags()
{
try
{
return Ok(GetAll());
}
catch(Exception ex)
{
return ControllerHelper.LogAndReturnBadRequest(_logger, ex);
}
}
private IEnumerable<TagDto> GetAll()
{
IEnumerable<TagDto> tags;
if (!_cache.TryGetValue(CacheKeys.States, out tags))
{
tags = _service.GetAll()?.Select(t => _mapper.Map<TagDto>(t));
if(tags != null)
_cache.Set(CacheKeys.States, tags);
}
return tags;
}
Startup.cs
services.AddMemoryCache();
我一行一行地调试代码,但即使在我的代码的最后一行之后,都没有任何错误。
我看到的错误是在 Kestrel 控制台中。值得注意的是,只有在从 _cache 获取标记时才会出现错误,而第一次直接从数据库获取标记时不会出现。
这是我从 Postman 请求中得到的:
有很多类似的问题涉及 dispose 对象,但在这里您可以看到我在代码中没有使用 dispose () 或 using()。