web-dev-qa-db-fra.com

Conversion de HttpResponseMessage en IActionResult dans .NET Core

Je porte un code précédemment écrit dans .NET Framework vers .NET Core.

J'ai eu quelque chose comme ça:

HttpResponseMessage result = await client.SendAync(request);
if (result.StatusCode != HttpStatusCode.OK)
{
    IHttpActionResult response = ResponseMessage(result);
    return response;
}

La valeur de retour de cette fonction est maintenant IActionResult.

Comment puis-je prendre l'objet HttpResponseMessage result et renvoyer une IActionResult à partir de celui-ci?

3
noblerare

Vous pouvez retourner en utilisant des codes d'état tels que Ok(); ou BadRequest();

Ou retourner en utilisant un dynamique en utilisant

StatusCode(<Your status code number>,<Optional return object>);
1
Lyco

Vous devriez pouvoir migrer votre code existant dans ASP.NET Core 2.x à l'aide de Microsoft.AspNetCore.Mvc.WebApiCompatShim nuget.

Ensuite, vous pouvez faire:

return new ResponseMessageResult(result);

Sinon, vous pouvez également hériter de votre Controller de ApiController et laisser votre code tel quel:

public class MyController : ApiController 
{
    public IActionResult Get()
    {
        // other code...
        HttpResponseMessage result = await client.SendAync(request);
        if (result.StatusCode != HttpStatusCode.OK)
        {
            IActionResult response = ResponseMessage(result);
            return response;
        }
        // other code...
    }    
}

Plus d'informations dans la documentation officielle

2
Federico Dipuma

Merci pour vos réponses tout le monde. J'ai emprunté un itinéraire légèrement différent. Je suppose que le point essentiel de ce code était que, si la variable SendAsync échoue de quelque manière que ce soit, je souhaite renvoyer ce message d'erreur. Alors au lieu de cela, j'ai changé pour que ce soit quelque chose comme:

if (result.StatusCode != HttpStatusCode.OK)
{
    return BadRequest(result.ReasonPhrase);
}
0
noblerare