What should be the return type of WEB API Action Method?

后端 未结 2 2137
时光取名叫无心
时光取名叫无心 2021-02-14 05:21

I am developing ASP.NET Web API using .NET Core. This Web API is going to be mainly accessed by UI application (UI will be developed using ASP.NET Core MVC) but in future API ma

相关标签:
2条回答
  • 2021-02-14 05:57

    Have a look at swagger: https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger It's better to specify ProducesResponseType attribute for method:

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

    So that automatically generated swagger documentation to show the actual returned data for the method.

    0 讨论(0)
  • 2021-02-14 06:06

    If I want [the] client to do content negotiation then what should be the return type of the API action method?

    To do content negotiation, return Task<ObjectResult> or Task<MyPoco>.

    The framework automatically wraps POCOs in an ObjectResult; therefor, both options are equivalent, and both will obey the HTTP Accept header. You will also get content negotiation by returning any result that implements ObjectResult, such as an OkObjectResult does.

    If I want [the] method to always return data in JSON format then what should be [the] return type of the API action method?

    To always return JSON, return a Task<JsonResult> (or use the [Produces] filter).

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

    [S]o I am assuming then IActionResult is only used for MVC controller?

    IActionResult is the contract for all results that a Controller returns. If your action's signature has an IActionResult return type, then your action's method body can return any result type, because all of them implement the IActionResult interface. Here is the inheritance hierarchy.

    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 
    

    See also: https://github.com/aspnet/Mvc/tree/dev/src/Microsoft.AspNetCore.Mvc.Core

    0 讨论(0)
提交回复
热议问题