考虑到错误,是否有一种简单的方法将IdentityResult转换为IActionResult?
发布于 2016-06-29 13:58:08
IdentityResult只是一个类,它告诉您一个ASP.NET (核心)标识操作是否成功,并且在发生错误时提供错误消息,并且与实现IActionResult接口的MVC操作的结果无关。
如果使用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);
}或者,如果您是非常懒惰的,编写您自己的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);
}
}当然,这可以进一步优化,这样您就不必在每个请求中创建两个IActionResult对象,但这是留给您自己的练习;)
发布于 2016-06-29 14:06:10
您可以为IdentityResult编写一个扩展方法,它返回如下所示的ObjectResult:
public static class IdentityResultExtension
{
public static ObjectResult ToObjectResult(this IdentityResult result)
{
//
return new ObjectResult(result);
}
}然后在行动中使用它:
public IActionResult YourAction()
{
IdentityResult result;
return result.ToObjectResult();
}https://stackoverflow.com/questions/38101241
复制相似问题