身份结果到操作结果

Zeu*_*s82 2 asp.net-core

有没有一种简单的方法可以将 an 转换IdentityResultIActionResult考虑到错误的 an ?

Tse*_*eng 6

IdentityResult只是一个类,它告诉您 ASP.NET(Core)Identity 操作是否成功,并且在出现错误时向您提供错误消息,并且与实现IActionResult接口的 MVC Action 结果无关。

如果您使用 WebApi/RestApi 控制器,您可以将其翻译为类似的内容

public IActionResult SomeActionName() 
{
    IdentityResult result = ...; // some identity operation

    // all is okay, return http code 200
    if(result.Success) 
        return Ok();

    // error happened, return http code 400 + errors as json
    return BadRequest(result.Errors);
}
Run Code Online (Sandbox Code Playgroud)

或者如果你真的很懒,可以自己写IActionResult

public class IdentityActionResult : IActionResult
{
    private readonly IdentityResult identityResult;

    public IdentityActionResult(IdentityResult identityResult) 
    {
        this.identityResult = identityResult;
    }

    public Task ExecuteResultAsync(ActionContext context)
    {
        IActionResult actionResult = null;
        if(identityResult.Success)
        {
            actionResult = new OkResult();
        }
        else
        {
            actionResult = new BadRequestObjectResult(identityResult.Errors);
        }

        return actionResult.Execute(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,这可以进一步优化,这样您就不必为IActionResult每个请求创建两个对象,但这是一个留给您的练习;)