return类型的WEB API Action Method应该是什么?
What should be the return type of WEB API Action Method?
我正在使用 .NET Core 开发 ASP.NET Web API。此 Web API 将主要由 UI 应用程序访问(UI 将使用 ASP.NET 核心 MVC 开发)但将来 API 可能会被访问其他应用程序也是如此。
在我的 WEB 中 API 所有方法都是异步的。
如果我希望客户端进行内容协商,那么 API 操作方法的 return 类型应该是什么 Task<IActionresult>
或 Task<SomePOCO>
如果我希望方法始终以 JSON 格式 return 数据,那么 API 操作方法的 return 类型应该是什么?应该是 Task<IActionResult>
或 Task<JsonResult>
还是 Task<SomePOCO>
因为我认为所有 3 个都可以工作所以不确定哪个适合这里?
If I want [the] client to do content negotiation then what should be the return type of the API action method?
要进行内容协商,return Task<ObjectResult>
或 Task<MyPoco>
。
框架自动将 POCO 包装在 ObjectResult
中;因此,这两个选项是等效的,并且都将遵守 HTTP Accept
header。您还可以通过 returning 任何实现 ObjectResult
的结果来进行内容协商,例如 OkObjectResult
。
If I want [the] method to always return data in JSON format then what should be [the] return type of the API action method?
总是returnJSON,return一个Task<JsonResult>
(或者使用[Produces]
过滤器)。
另请参阅: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
是 all 的合同结果 Controller
returns。如果您的操作签名具有 IActionResult
return 类型,那么您的操作方法 body 可以 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
看看招摇:
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 文档以显示该方法的实际返回数据。
我正在使用 .NET Core 开发 ASP.NET Web API。此 Web API 将主要由 UI 应用程序访问(UI 将使用 ASP.NET 核心 MVC 开发)但将来 API 可能会被访问其他应用程序也是如此。
在我的 WEB 中 API 所有方法都是异步的。
如果我希望客户端进行内容协商,那么 API 操作方法的 return 类型应该是什么 Task<IActionresult>
或 Task<SomePOCO>
如果我希望方法始终以 JSON 格式 return 数据,那么 API 操作方法的 return 类型应该是什么?应该是 Task<IActionResult>
或 Task<JsonResult>
还是 Task<SomePOCO>
因为我认为所有 3 个都可以工作所以不确定哪个适合这里?
If I want [the] client to do content negotiation then what should be the return type of the API action method?
要进行内容协商,return Task<ObjectResult>
或 Task<MyPoco>
。
框架自动将 POCO 包装在 ObjectResult
中;因此,这两个选项是等效的,并且都将遵守 HTTP Accept
header。您还可以通过 returning 任何实现 ObjectResult
的结果来进行内容协商,例如 OkObjectResult
。
If I want [the] method to always return data in JSON format then what should be [the] return type of the API action method?
总是returnJSON,return一个Task<JsonResult>
(或者使用[Produces]
过滤器)。
另请参阅: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
是 all 的合同结果 Controller
returns。如果您的操作签名具有 IActionResult
return 类型,那么您的操作方法 body 可以 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
看看招摇: 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 文档以显示该方法的实际返回数据。