2013-02-19 89 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