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);
}

代わりに、コントローラーからそのような null チェックを削除したい場合は、カスタム属性を定義できます。

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");
        }
    }
}

このようにして、アクションでモデルが 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 に答える