Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CreateAsync方法既不会抛出错误,也不会更新数据库_C#_Asp.net_Asp.net Core_Async Await_Asp.net Identity - Fatal编程技术网

C# CreateAsync方法既不会抛出错误,也不会更新数据库

C# CreateAsync方法既不会抛出错误,也不会更新数据库,c#,asp.net,asp.net-core,async-await,asp.net-identity,C#,Asp.net,Asp.net Core,Async Await,Asp.net Identity,我有以下简单的代码来使用CreateAsync方法创建一个新用户。代码不会抛出任何错误,但也不会更新数据库。我在IdentityResult结果行中添加了一个断点,它在那里停止,在if语句中添加了另一个断点,它在那里不停止。因此,我不知道如何调试此代码并找到错误。有什么帮助吗 公共异步任务CreateApplicationUser用户,字符串密码 { IdentityResult result=wait_userManager.CreateAsyncuser,密码; 如果!result.succ

我有以下简单的代码来使用CreateAsync方法创建一个新用户。代码不会抛出任何错误,但也不会更新数据库。我在IdentityResult结果行中添加了一个断点,它在那里停止,在if语句中添加了另一个断点,它在那里不停止。因此,我不知道如何调试此代码并找到错误。有什么帮助吗

公共异步任务CreateApplicationUser用户,字符串密码 { IdentityResult result=wait_userManager.CreateAsyncuser,密码; 如果!result.successed { 抛出新AppException失败; } 返回结果; } 从控制器调用此创建函数:

[异名] [HttpPost] [Routeapi/ApplicationUser/Register] 公共IActionResult寄存器[FromBody]应用程序插入到用户 { //将数据映射到实体 var user=\u mapper.MapuserDto; 尝试 { //拯救 _userService.Createuser,userDto.Password; 返回Ok; } 捕获异常 { //如果出现异常,则返回错误消息 返回BadRequestnew{message=ex.message}; } }
Register方法是从React接口调用的。

您从未等待过异步调用。因此,当您的操作结果返回时,它甚至可能无法完成,因此可能永远无法运行。确保等待任何异步调用。这意味着调用方法需要标记为async,并使其返回一个或多个任务,直到到达事件处理程序或框架代码为止。以下是您的代码的外观:

[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 });
    }   
}

还要注意,将异常详细信息返回给客户机用户是个坏主意。异常可能包含敏感信息,攻击者可利用这些信息攻击您的系统。相反,只需返回一条通用的“对不起,出了问题”消息,并将异常详细信息记录到日志框架中。如果您没有日志框架,那么就买一个。

您从未等待过异步调用。因此,当您的操作结果返回时,它甚至可能无法完成,因此可能永远无法运行。确保等待任何异步调用。这意味着调用方法需要标记为async,并使其返回一个或多个任务,直到到达事件处理程序或框架代码为止。以下是您的代码的外观:

[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 });
    }   
}

还要注意,将异常详细信息返回给客户机用户是个坏主意。异常可能包含敏感信息,攻击者可利用这些信息攻击您的系统。相反,只需返回一条通用的“对不起,出了问题”消息,并将异常详细信息记录到日志框架中。如果您没有日志框架,请获取一个。

您是否验证了它正在更新正确的数据库?你分析代码了吗?结果的其他属性是否有帮助?您是否在附加调试程序的情况下逐行检查代码,以确保它被命中?有一段代码在调用你的Create方法?@mason,它在IdentityResult结果行中停止。但是,尽管有一个断点,但以后不会停止。此外,“单步调试”选项未访问CreateAync的内部。您可能遇到了死锁,如何调用它?@nalnpir我在OP中共享了它。您是否尝试将ConfigureWaitFalse添加到CreateAync中?老实说,我不确定这是否会起作用,因为您的公共方法是同步的,我认为它会在执行任何操作之前返回,这就是为什么您的代码根本没有执行的原因。您是否验证了它正在更新正确的数据库?你分析代码了吗?结果的其他属性是否有帮助?您是否在附加调试程序的情况下逐行检查代码,以确保它被命中?有一段代码在调用你的Create方法?@mason,它在IdentityResult结果行中停止。但是,尽管有一个断点,但以后不会停止。此外,“单步调试”选项未访问CreateAync的内部。您可能遇到了死锁,如何调用它?@nalnpir我在OP中共享了它。您是否尝试将ConfigureWaitFalse添加到CreateAync中?老实说,我不确定这是否会起作用,因为您的公共方法是同步的,我认为它会在执行任何操作之前返回,这就是您的代码根本不执行的原因