Retourner le code D'état HTTP personnalisé de WebAPI 2 endpoint

je travaille sur un service dans WebAPI 2, et le terminal renvoie actuellement un IHttpActionResult . Je voudrais retourner un code d'état 422 , mais comme il n'est pas dans l'énumération HttpStatusCode , je suis à une perte quant à la façon dont il serait envoyé, puisque tous les constructeurs exigent un paramètre de HttpStatusCode

en l'état actuel, je renvoie BadResult(message) , mais retourner un message 422 + serait plus descriptif et utile pour mes clients. Des idées?

40
demandé sur abatishchev 2014-05-01 02:38:20

3 réponses

selon la spécification C#:

l'ensemble des valeurs qu'un type enum peut prendre n'est pas limité par ses membres enum. En particulier, toute valeur du type sous-jacent d'un enum peut être moulée au type enum et est une valeur valide distincte de ce type enum

vous pouvez donc lancer le code d'état 422 en HttpStatusCode.

exemple de contrôleur:

using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace CompanyName.Controllers.Api
{
    [RoutePrefix("services/noop")]
    [AllowAnonymous]
    public class NoOpController : ApiController
    {
        [Route]
        [HttpGet]
        public IHttpActionResult GetNoop()
        {
            return new System.Web.Http.Results.ResponseMessageResult(
                Request.CreateErrorResponse(
                    (HttpStatusCode)422,
                    new HttpError("Something goes wrong")
                )
            );
        }
    }
}
71
répondu lilo.jacob 2014-05-01 09:32:04
 return Content((HttpStatusCode) 422, whatEver);
"151910920 de crédit" est de: Retour de contenu avec IHttpActionResult pour les non-réponse OK

et votre code doit être <= 999

et ignorez les codes entre 100 et 200.

17
répondu peyman 2017-05-23 11:55:10

j'utilise cette façon simple et élégante.

public ActionResult Validate(User user)
{
     return new HttpStatusCodeResult((HttpStatusCode)500, 
               "My custom internal server error.");
}

puis contrôleur angulaire.

function errorCallBack(response) {            
$scope.response = {
   code: response.status,
   text: response.statusText
}});    

J'espère que ça vous aidera.

3
répondu Ricardo G Saraiva 2017-08-16 17:24:12