gpt4 book ai didi

asp.net-core - WEB API Action Method 的返回类型应该是什么?

转载 作者:行者123 更新时间:2023-12-03 17:49:20 25 4
gpt4 key购买 nike

我正在使用 .NET Core 开发 ASP.NET Web API。该 Web API 将主要由 UI 应用程序访问(UI 将使用 ASP.NET Core MVC 开发),但 future API 也可能由其他应用程序访问。

在我的 WEB API 中,所有方法都是异步的。

如果我想让客户端进行内容协商,那么 API 操作方法的返回类型应该是什么 Task<IActionresult>Task<SomePOCO>
如果我希望方法始终以 JSON 格式返回数据,那么 API 操作方法的返回类型应该是什么?应该是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?



做内容协商,返回 Task<ObjectResult>Task<MyPoco> .

该框架会自动将 POCO 包装在 ObjectResult 中;因此,这两个选项是等效的,并且都将遵守 HTTP Accept标题。您还将通过返回实现 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?



要始终返回 JSON,请返回 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的契约(Contract)全部 结果是 Controller返回。如果您的操作签名有 IActionResult返回类型,那么你的 Action 的方法体可以 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

关于asp.net-core - WEB API Action Method 的返回类型应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com