我在asp.net core mvc中有一个简单的项目,我正在尝试将声明分配给指定的用户。当我创建一个新用户并分配声明时,一切正常,但当我尝试通过id获取用户,然后分配声明时,它会抛出:
System.ObjectDisposedException:'无法访问已处置的对象。此错误的常见原因是处理从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您在上下文中调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况。如果使用依赖注入,则应该让依赖注入容器处理上下文实例。'
我不确定应该怎么做。用'尝试了不同的事情。等但似乎没有任何帮助。问题出在AddClaimAsync上。
var claim = new Claim(model.ClaimName, "True");
var user = _userManager.Users.SingleOrDefault(x => x.Id == model.UserId);
if (model.ClaimValue)
{
await _userManager.AddClaimAsync(user, claim);
}
else
{
await _userManager.RemoveClaimAsync(user, claim);
}
await _applicationDbContext.SaveChangesAsync();
对于_applicationDbContext,这是通过DI传递给服务的db上下文。
如果您有任何想法,我将非常感谢您分享。
答案 0 :(得分:0)
此错误是由于方法签名不正确引起的。您可能已经声明
public await void OnPost(){
....
}
您应返回Task<IActionResult>
,如下所示:
public await Task<IActionResult> OnPostAsync(){
....
}