我正在尝试编写一个控制器,该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用。但是,当我发出命令时var user = await GetCurrentUserAsynch();
在对 DBContext 的任何调用之前,如下所示,我收到一个 ObjectDisposeException(无法访问已处置的对象)。
看来 UserManager 和 DBContext 不能很好地配合,但是我找不到关于此事的太多信息。
[HttpPost]
public async void EditUserMapItemAjax([FromBody]UserMapItemViewModel userMapItemViewModel)
{
var user = await GetCurrentUserAsync();
var mapItem = _db.MapItems.SingleOrDefault(x => x.Id == userMapItemViewModel.MapItemId);
...
}
private Task<ApplicationUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);
将您的控制器操作声明为async Task
, not async void
.
对于后者,一旦你的方法达到第一个await
,它将控制返回给调用者,并且因为 ASP.NET 现在无法跟踪其进度(就像它返回Task
相反),它会处理您的控制器实例,以及(最有可能)随之而来的任何本地范围的字段。
当您在那里时,由于您无论如何都处于异步方法中,因此您应该更喜欢 EF 调用的异步版本; IE。await _db.MapItems.SingleOrDefaultAsync()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)