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

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

就目前而言,我正在返回BadResult(message) ,但是返回422 +消息对我的客户来说更具描述性和实用性。 有任何想法吗?

根据C#规范:

枚举types可以采取的值的集合不受其枚举成员的限制。 特别是,枚举的基础types的任何值都可以转换为枚举types,并且是该枚举types的一个明确的有效值

因此,您可以将状态码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") ) ); } } } 
  return Content((HttpStatusCode) 422, whatEver); 

信用是: 用IHttpActionResult返回非OK响应的内容

并且您的代码必须<= 999

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

我用这种方式简单而优雅。

 public ActionResult Validate(User user) { return new HttpStatusCodeResult((HttpStatusCode)500, "My custom internal server error."); } 

然后angular控制器。

 function errorCallBack(response) { $scope.response = { code: response.status, text: response.statusText }}); 

希望它可以帮助你。