2013-02-19 4 views
36

In Asp.net Web Api, wie setze ich den Statuscode meiner Antwort mit einem int oder Zeichenfolge, nicht die StatusCode enum?Asp.net Web API Antwort-Status-Code auf Nummer

In meinem Fall möchte ich Validierungsfehler mit Statuscode 422 "Unprocessable Entity" zurückgeben, aber es gibt keinen Enumerator dafür.

HttpResponseMessage response = Request.CreateResponse(); 
response.StatusCode = HttpStatusCode.UnprocessableEntity; //error, not in enum 

Antwort

39

Sie können jedes int in einen HttpStatusCode umwandeln. auch

response.StatusCode = (HttpStatusCode)422; 

Sie können:

HttpResponseMessage response = Request.CreateResponse((HttpStatusCode)422, "Unprocessable Entity"); 
+0

Dank! Genau das, was ich brauche! In Ihrem zweiten Beispiel ist der zweite Parameter für den Inhalt der Antwort. Die Übergabe von "Unprocessable Entity" kann etwas überflüssig sein. Zum Beispiel mache ich das: Request.CreateResponse ((HttpStatusCode) 422, validationErrors); –

+0

Yeh, das ist es! Der zweite Parameter kann alles sein. =) – lolol

+2

Die Erweiterungsmethode CreateResponse kann im Namensraum "System.Net.Http" gefunden werden. –

10

ich eine Klasse für diese zu schaffen endete:

public class HttpStatusCodeAdditions 
    { 
     public const int UnprocessableEntityCode = 422; 
     public static HttpStatusCodeAdditions UnprocessableEntity = new HttpStatusCodeAdditions(UnprocessableEntityCode); 

     private HttpStatusCodeAdditions(int code) 
     { 
      Code = code; 
     } 
     public int Code { get; private set; } 

     public static implicit operator HttpStatusCode(HttpStatusCodeAdditions addition) 
     { 
      return (HttpStatusCode)addition.Code; 
     } 
    } 

, die wie folgt verwendet werden kann:

response.StatusCode = HttpStatusCodeAdditions.UnprocessableEntity; 
+0

Schön und sauber, ich mag es! – NinjaCross