web-dev-qa-db-ja.com

WEB APIアクションメソッドの戻り値の型は何ですか?

.NETCoreを使用してASP.NETWebAPIを開発しています。このWebAPIは主にUIアプリケーションによってアクセスされる予定です(UIはASP.NET Core MVCを使用して開発されます)が、将来的には他のアプリケーションからもアクセスされる可能性があります。

私のWEBAPIでは、すべてのメソッドが非同期です。

クライアントにコンテンツネゴシエーションを実行させたい場合、APIアクションメソッドの戻り値の型は何である必要がありますかTask<IActionresult>またはTask<SomePOCO>

メソッドが常にJSON形式でデータを返すようにしたい場合、APIアクションメソッドの戻り値の型は何である必要がありますか? Task<IActionResult>またはTask<JsonResult>またはTask<SomePOCO> 3つすべてが機能すると思うので、ここでどれが適切かわからないのですか?

10
LP13

クライアントにコンテンツネゴシエーションを実行させたい場合、APIアクションメソッドの戻り値の型は何である必要がありますか?

コンテンツネゴシエーションを行うには、Task<ObjectResult>またはTask<MyPoco>を返します。

フレームワークは、POCOをObjectResultで自動的にラップします。そのため、両方のオプションは同等であり、どちらもHTTP Acceptヘッダーに従います。また、ObjectResultのように、OkObjectResultを実装する結果を返すことで、コンテンツネゴシエーションを取得します。

[the]メソッドで常にJSON形式でデータを返すようにしたい場合、APIアクションメソッドの[the]戻り値の型はどうあるべきですか?

常にJSONを返すには、Task<JsonResult>を返します(または[Produces]フィルターを使用します)。

参照: https://docs.asp.net/en/latest/mvc/models/formatting.html#content-negotiation

[S] o IActionResultはMVCコントローラーにのみ使用されると思いますか?

IActionResultは、Controllerが返すall結果のコントラクトです。アクションのシグネチャにIActionResult戻り値の型がある場合、アクションのメソッド本体はすべてreturnインターフェイスを実装しているため、任意の結果タイプをIActionResultできます。これが継承階層です。

IActionResult
  ActionResult
    ChallengeResult 
    ContentResult 
    EmptyResult 
    FileResult 
      FileContentResult 
      FileStreamResult 
      PhysicalFileResult 
      VirtualFileResult 
    ForbidResult 
    LocalRedirectResult 
    ObjectResult
      CreatedAtActionResult 
      CreatedAtRouteResult 
      CreatedResult 
      BadRequestObjectResult 
      NotFoundObjectResult 
      OkObjectResult 
    RedirectResult 
    RedirectToActionResult 
    RedirectToRouteResult 
    SignInResult 
    SignOutResult 
    StatusCodeResult 
      NoContentResult 
      NotFoundResult 
      OkResult 
      UnauthorizedResult 
      UnsupportedMediaTypeResult 
      BadRequestResult 

参照: https://github.com/aspnet/Mvc/tree/dev/src/Microsoft.AspNetCore.Mvc.Core

10
Shaun Luttin

闊歩を見てください: https://docs.Microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger ProducesResponseType属性を指定することをお勧めしますメソッドの場合:

[ProducesResponseType(typeof(TodoItem), 201)]
public IActionResult Create([FromBody, Required] TodoItem item)

そのため、メソッドに対して実際に返されるデータを表示するために、自動的に生成されたSwaggerドキュメント。

3
Pavel Biryukov