【问题标题】:Asp.net Web Api set response status code to numberAsp.net Web Api 将响应状态码设置为数字
【发布时间】:2013-02-19 19:43:26
【问题描述】:

在 Asp.net Web Api 中,如何使用 int 或字符串而不是 StatusCode 枚举来设置响应的状态代码?

在我的情况下,我想返回带有状态码 422“无法处理的实体”的验证错误,但它没有枚举器。

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

【问题讨论】:

    标签: c# http asp.net-web-api


    【解决方案1】:

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

    response.StatusCode = (HttpStatusCode)422;
    

    您还可以:

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

    【讨论】:

    • 谢谢!正是我需要的!在您的第二个示例中,第二个参数用于响应的内容。传递“无法处理的实体”可能有点多余。例如,我这样做:Request.CreateResponse((HttpStatusCode)422, validationErrors);
    • 是的,就是这样!第二个参数可以是任何东西。 =)
    • 扩展方法 CreateResponse 可以在命名空间“System.Net.Http”中找到。
    【解决方案2】:

    我最终为此创建了一个类:

      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;
    

    【讨论】:

    • 漂亮干净,我喜欢!
    【解决方案3】:

    将您的 HttpStatusCode 转换为整数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2019-10-28
      • 2011-09-04
      相关资源
      最近更新 更多