AddClaimAsync抛出'无法访问已处置的对象'

时间:2017-11-19 17:07:26

标签: c# asp.net-core entity-framework-core asp.net-core-identity

我在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上下文。

如果您有任何想法,我将非常感谢您分享。

1 个答案:

答案 0 :(得分:0)

此错误是由于方法签名不正确引起的。您可能已经声明

public await void OnPost(){
....
}

您应返回Task<IActionResult>,如下所示:

public await Task<IActionResult> OnPostAsync(){ .... }