10

如果出现问题,如何从 ASP.NET Core 1.0 中的 API 方法返回 HttpStatus 代码?

如果该方法应该返回一个特定的对象类型,当我尝试返回一个 Http 状态代码时,我会收到一条错误消息,指出我无法将我的对象转换为状态代码。

[HttpPost]
public async Task<SomeObject> Post([FromBody] inputData)
{
   // I detect an error and want to return BadRequest HttpStatus
   if(inputData == null)
       return new HttpStatusCode(400);

   // All is well, so return the object
   return myObject;
}
4

1 回答 1

12

IActionResult而是从您的控制器操作中返回一个:

public async Task<IActionResult> Post([FromBody] InputData inputData)
{
    if(inputData == null)
    {
        return new HttpStatusCodeResult((int) HttpStatusCode.BadRequest);
    }

    //...

    return Ok(myObject);
}

如果您想从控制器中删除此类空检查,您可以定义一个自定义属性:

public class CheckModelForNullAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.ActionArguments.Any(k => k.Value == null))
        {
            context.Result = new BadRequestObjectResult("The model cannot be null");
        }
    }
}

这样我们就不必担心模型在动作中为空。

[HttpPost]
[CheckModelForNull]
public async Task<SomeObject> Post([FromBody]InputData inputData)
{
    // My attribute protects me from null
    // ...
    return myObject;
}
于 2016-02-04T16:03:53.170 回答