9

問題が発生した場合、ASP.NET Core 1.0のAPIメソッドからHttpStatusコードを返すにはどうすればよいですか?APIメソッドのHttpStatusCodeを返す

メソッドが特定のオブジェクトタイプを返すと想定されている場合、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; 
} 
+0

エラーが権利である、あなたは 'タスクを返す'と '戻るOK(myObjectという)への復帰を変更するために検討すべきである。WebAPIので' –

+0

、あなたが表現(特定の応答コードと例外をスローEnumによって)。例外をバブルアップさせるのではなく、指定したステータスコードを返します。 '新しいHttpResponseException(HttpStatusCode.NotFound);をスローする ' – James

+0

@Jamesあなたの応答をありがとうが、私はHttpResponseExceptionを見つけるのに苦労している。 System.Web.Httpネームスペースにあるように見えますが、ASP.NET Core 1.0ではそれを参照することさえできません。これは、このNuGetパッケージをインストールすることを示唆しています。https://www.nuget.org/packages/Microsoft.AspNet.Mvc.WebApiCompatShim/これはASP.NET Core 1.0でこれを処理する正しい方法ですか? – Sam

答えて

9

戻る代わりに、あなたのコントローラのアクションからIActionResult

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

この:あなたの代わりに、コントローラから、このようなヌルチェックを削除したい場合は

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

    //... 

    return Ok(myObject); 
} 

カスタム属性を定義することができます私たちは、アクションでモデルがnullであることを気にする必要はありません。

[HttpPost] 
[CheckModelForNull] 
public async Task<SomeObject> Post([FromBody]InputData inputData) 
{ 
    // My attribute protects me from null 
    // ... 
    return myObject; 
} 
+0

あなたの提案をありがとうが、私はそれを行う必要はありません。 ASP.NET Core 1.0 APIが古いバージョンのように動作するように互換性パッケージをインストールする必要はありません。私が本当に学びたいのは、ASP.NET Core 1.0 APIでHttpStatusコードを返す正しい方法です。 – Sam

+0

申し訳ありませんが、私は答えが早すぎました。今更新されました – peco

+0

もう一度あなたの助けに感謝します。これは、「暗黙のうちに 'HttpStatusCodeResult型を' SomeObject 'に暗黙的に変換できません。これは私が苦労してきたことです。 – Sam

関連する問題