2013-02-19 10 views
36

Asp.net Web Apiでは、ステータスコードではなくintまたは文字列を使用して、レスポンスのステータスコードを設定するにはどうすればよいですか?Asp.net Web Api番号に応答ステータスコードを設定

私のケースでは、ステータスコード422の "Unprocessable Entity"という検証エラーが返されますが、列挙子はありません。

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

感謝を!正確に私が必要なもの! 2番目の例では、2番目のパラメータはレスポンスの内容です。 "Unprocessable Entity"を渡すことは少し冗長かもしれません。たとえば、私はこれをやっている:Request.CreateResponse((HttpStatusCode)422、validationErrors); –

+0

ええ、それはそれです! 2番目のパラメータは何でもかまいません。 =) – lolol

+2

拡張メソッドCreateResponseは、名前空間 "System.Net.Http"にあります。 –

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

関連する問題