2016-06-29 4 views
0

Gibt es eine einfache Möglichkeit, eine IdentityResult in eine IActionResult unter Berücksichtigung von Fehlern zu konvertieren?IdentityResult zu ActionResult

+1

sie sind völlig unabhängig Konzepte, nur weil sie beide haben das Wort Ergebnis in ihnen bedeutet nicht, dass sie von einem zum anderen umwandelbar sind –

Antwort

2

IdentityResult ist nur eine Klasse, die Sie, wenn eine ASP.NET (Core) Identität Betrieb eines Fehlers erfolgreich war oder nicht und im Fall sagt bietet Ihnen Fehlermeldungen und steht in keinem Zusammenhang Ergebnisse MVC Aktion ist die IActionResult-Schnittstelle implementieren.

Wenn Sie WebAPI/RestApi Controller, würden Sie es so etwas wie

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

übersetzen Oder wenn Sie wirklich faul sind, schreiben Sie Ihre eigene 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); 
    } 
} 

Natürlich kann dies weiter optimiert werden, so dass Sie nicht zwei IActionResult Objekte pro Anfrage erstellen müssen, aber das ist eine Aufgabe, die Ihnen überlassen bleibt;

)
0

Sie können eine Erweiterungsmethode für IdentityResult schreiben, die so etwas wie dieses Objectzurückgibt:

public static class IdentityResultExtension 
{ 
    public static ObjectResult ToObjectResult(this IdentityResult result) 
    { 
     // 
     return new ObjectResult(result); 
    } 
} 

dann in Aktion verwenden:

public IActionResult YourAction() 
{ 
    IdentityResult result; 
    return result.ToObjectResult(); 
} 
Verwandte Themen