2013-02-19 45 views
36

在Asp.net Web Api中,如何使用int或字符串設置我的響應的狀態碼,而不是StatusCode枚舉?Asp.net Web Api將響應狀態碼設置爲數字

在我的情況,我想返回驗證錯誤狀態碼422,「不可處理的實體」,但沒有它的枚舉。

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

回答

39

您可以將任何int轉換爲HttpStatusCode。

response.StatusCode = (HttpStatusCode)422; 

你還可以:

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

謝謝!正是我需要的!在第二個示例中,第二個參數用於響應的內容。傳遞「不可處理的實體」可能有點多餘。例如,我這樣做:Request.CreateResponse((HttpStatusCode)422,validationErrors); – 2013-02-19 20:12:15

+0

是的,就是這樣!第二個參數可以是任何東西。 =) – lolol 2013-02-19 20:15:24

+2

擴展方法CreateResponse可以在命名空間「System.Net.Http」中找到。 – 2013-12-13 14:43:15

10

我結束了這個創建一個類:

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

它可以這樣使用:

response.StatusCode = HttpStatusCodeAdditions.UnprocessableEntity; 
+0

不錯,乾淨,我喜歡它! – NinjaCross 2016-10-18 10:16:12