web-dev-qa-db-fra.com

La classe System.Net HttpStatusCode n'a pas de code 422

Existe-t-il un moyen de gérer le code de statut http 422 avec élégance? Je cherche la meilleure pratique ici. Je sais que HttpStatusCode est une énumération, alors ce que j’ai essayé est la suivante: 

HttpStatusCode Unprocessable = (HttpStatusCode)422;
if (Response == (HttpStatusCode)422)

mais ne me permet pas de le comparer. Est-ce que je fais quelque chose de mal ici? 

Quel est le meilleur moyen d’ajouter ce code d’état au moment de l’exécution? 

28
golldy

J'utilisais RestSharp qui renvoie le code d'état de la réponse du serveur dans une propriété de type HttStatusCode et je devais vérifier moi-même une réponse 422, mais le type ne l'inclut bien sûr pas. Heureusement, je pouvais encore tester les éléments suivants:

if(response.StatusCode == (HttpStatusCode)422)
{
    // Do my stuff..
}
22
Nick Gotch

Si plusieurs actions de votre API peuvent éventuellement renvoyer un 422, vous pouvez envisager de placer la vérification dans une méthode d'extension de la manière suivante:

    public static bool IsUnprocessableEntityResponse(this HttpResponseMessage message)
    {
        Requires.NotNull(message, nameof(message));

        return (int) message.StatusCode == StatusCodes.Status422UnprocessableEntity;
    }

Que vous pouvez ensuite utiliser dans votre client comme ceci:

    if (response.IsUnprocessableEntityResponse())
        return Response.UnprocessableEntity<Resource>();

En évitant également le nombre magique 422 dans votre code source en même temps.

1
aevitas