c# - CreateAsync 方法既不抛出错误也不更新数据库
问题描述
我有以下简单的代码来使用该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 接口调用的。
解决方案
你从来没有等待你的异步调用。因此,当您的操作结果返回时,它甚至可能还没有完成,因此可能永远不会运行。确保您等待任何异步调用。这意味着调用方法需要标记为异步(并使其返回一个任务或任务),一直到调用堆栈,直到它到达事件处理程序或框架代码。这是您的代码应如下所示:
[AllowAnonymous]
[HttpPost]
[Route("api/ApplicationUser/Register")]
public async Task<IActionResult> Register([FromBody]ApplicationUserDto userDto)
{
//map dto to entity
var user = _mapper.Map<ApplicationUser>(userDto);
try
{
// save
await _userService.Create(user, userDto.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
另请注意,将异常详细信息返回给客户端用户是个坏主意。异常可能包含攻击者可以用来利用您的系统的敏感信息。相反,只需返回一个通用的“抱歉,出现问题”消息并将异常详细信息记录到您的日志框架。如果您没有日志记录框架,请获取一个。
推荐阅读
- c# - EF Core 中的条件导航属性
- javascript - React:多选(通过 Ctrl 或 Alt)
- amazon-web-services - 具有托管身份和 IP 限制的虚拟机谁赢了?
- angular - for 循环内的 for 循环给出奇怪的结果
- url-rewriting - 未拾取(虚拟)文件夹中 web.config 中的后续 IIS 重写规则
- json - Angular 8 - HttpClient 获取一个复杂的 JSON 对象并填充一个 html 表
- c - 如何用 DBL_EPSILON 比较两个浮点数的定量?
- tensorflow - Keras 是否有一种无需额外数据处理措施即可读取 TFRecord 数据集的方法?
- vega - 在 Vega Lite 中仅显示整数值的刻度
- java - 每当我的 Android AlertDialog 加载时,如何修复错误,应用程序崩溃