gpt4 book ai didi

c# - CreateAsync 方法既不抛出错误也不更新数据库

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:47 24 4
gpt4 key购买 nike

我有以下使用 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 函数是从 Controller 调用的:

[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 接口(interface)调用的。

最佳答案

您从未等待您的异步调用。因此,它甚至可能在您的操作结果返回时还没有完成,因此可能永远不会运行。确保您等待任何异步调用。这意味着调用方法需要标记为异步(并返回一个 Task 或 Task),一直到调用堆栈,直到它到达事件处理程序或框架代码。您的代码应如下所示:

[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# - CreateAsync 方法既不抛出错误也不更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55971213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com