将Asp.net Web Api的响应状态码设置为数字

40
在Asp.net Web Api中,我如何使用整数或字符串设置响应的状态码,而不是使用StatusCode枚举?在我的情况下,我想使用状态码422,“Unprocessable Entity”返回验证错误,但没有相应的枚举值。

在Asp.net Web Api中,如何使用整数或字符串设置响应的状态码,而不是使用StatusCode枚举?在我的情况下,我希望使用状态码422,“Unprocessable Entity”返回验证错误,但是没有相应的枚举值。

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

47

您可以将任何int转换为HttpStatusCode。

response.StatusCode = (HttpStatusCode)422;

您也可以:

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

谢谢!正是我需要的!在你的第二个例子中,第二个参数是响应内容。传递“Unprocessable Entity”可能有点多余。例如,我正在这样做:Request.CreateResponse((HttpStatusCode)422, validationErrors); - Josh Noe
是的,就是这样!第二个参数可以是任何东西。=) - lolol
3
CreateResponse扩展方法可在命名空间 "System.Net.Http" 中找到。 - Juha Palomäki

11

我最终创建了一个类来实现这个功能:

  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;

干净利落,我喜欢! - NinjaCross

0

将你的HttpStatusCode转换为整数:

response.StatusCode = Convert.ToInt32(HttpStatusCode.UnprocessableEntity)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接