我看过很多次这样的代码:
var user = await _userManager.FindByNameAsync(username);
var result = await _userManager.DeleteAsync(user);
return new JsonResult(result);
但我想知道你的意见,如果这是好的,或者如果你在检查用户是否确实存在的陈述中做得更好?
答案 0 :(得分:2)
这取决于_userManager.DeleteAsync
实现,因为您使用的是.Net Core Identity,DeleteAsync
方法的实现将抛出ArgumentNullException
您可以查看源代码here,这是方法的实现:
public virtual Task<IdentityResult> DeleteAsync(TUser user)
{
ThrowIfDisposed();
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
return Store.DeleteAsync(user, CancellationToken);
}
答案 1 :(得分:2)
答案取决于执行删除的上下文:
注意您的代码最终会user
检查null
,以避免在ArgumentNullException
的调用中DeleteAsync
。这只是一个实施细节:您需要做出的真正决定是如何处理它。
答案 2 :(得分:0)
注意:此答案假设您使用的是内置UserManager
而非自定义的。
正如您在source code中所看到的那样:
public virtual Task<IdentityResult> DeleteAsync(TUser user)
{
ThrowIfDisposed();
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
return Store.DeleteAsync(user, CancellationToken);
}
将null
作为参数传递给DeleteAsync
会抛出ArgumentNullException
。所以,不,你提供的代码不正确。您需要首先检查用户是否存在:
var user = await _userManager.FindByNameAsync(username);
if (user == null)
{
return BadRequest("User not found");
}
var result = await _userManager.DeleteAsync(user);
return Json(result);