从WebAPI 2端点返回自定义HTTP状态代码

Gar*_*ely 49 c# http-status-code-404 asp.net-web-api

我正在使用WebAPI 2中的服务,端点当前返回一个IHttpActionResult.我想返回一个状态代码422,但因为它不在HttpStatusCode枚举中,所以我不知道如何发送它,因为所有的构造函数都需要一个参数HttpStatusCode

现在,我正在回归BadResult(message),但返回422+消息对我的客户来说会更具描述性和实用性.有任何想法吗?

lil*_*cob 79

根据C#规范:

枚举类型可以采用的值集不受其枚举成员的限制.特别是,枚举的基础类型的任何值都可以强制转换为枚举类型,并且是该枚举类型的唯一有效值

因此,您可以将状态代码422转换为HttpStatusCode.

示例控制器:

using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace CompanyName.Controllers.Api
{
    [RoutePrefix("services/noop")]
    [AllowAnonymous]
    public class NoOpController : ApiController
    {
        [Route]
        [HttpGet]
        public IHttpActionResult GetNoop()
        {
            return new System.Web.Http.Results.ResponseMessageResult(
                Request.CreateErrorResponse(
                    (HttpStatusCode)422,
                    new HttpError("Something goes wrong")
                )
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 23

 return Content((HttpStatusCode) 422, whatEver);
Run Code Online (Sandbox Code Playgroud)

credit是for:使用IHttpActionResult返回内容以获得非OK响应

并且您的代码必须<= 999

请忽略100到200之间的代码.