【发布时间】:2019-09-22 01:59:54
【问题描述】:
我有以下简单的代码来使用CreateAsync 方法创建一个新用户。该代码不会引发任何错误,但也不会更新数据库。我在IdentityResult result 行上添加了一个断点,它在那里停止,另一个在if 语句中,它不会停止。结果,我不知道如何调试这段代码并找到错误。有什么帮助吗?
public async Task<IdentityResult> Create(ApplicationUser user, string password)
{
IdentityResult result = await _userManager.CreateAsync(user, password);
if (!result.Succeeded)
{
throw new AppException("Failed");
}
return result;
}
这个Create函数是从控制器调用的:
[AllowAnonymous]
[HttpPost]
[Route("api/ApplicationUser/Register")]
public IActionResult Register([FromBody]ApplicationUserDto userDto)
{
//map dto to entity
var user = _mapper.Map<ApplicationUser>(userDto);
try
{
// save
_userService.Create(user, userDto.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
Register 方法是从 React 接口调用的。
【问题讨论】:
-
您是否确认它正在更新正确的数据库?您是否对代码进行了概要分析?
result的其他属性是否有帮助?您是否在附加调试器的情况下逐行执行代码以确保它甚至被命中?有没有调用你的 Create 方法的代码? -
@mason 它停在
IdentityResult result行中。但是,虽然有断点,但后来并没有停止。还有step into调试选项不访问CreateAsync里面。 -
你可能遇到了死锁,你怎么称呼它?
-
@nalnpir 我在 OP 中分享了它。
-
您是否尝试将 ConfigureAwait(false) 添加到 CreateAsync?老实说,我不确定这是否会起作用,因为您的公共方法是同步的,我认为它会在执行任何操作之前返回,这就是您的代码根本没有执行的原因
标签: c# asp.net asp.net-core async-await asp.net-identity