控制器方法返回操作结果的原因是什么?(ASP.NET 核心网页 API)



我对Web API很陌生。我观察到某些方法返回ActionResult。为什么?例如,返回CustomerDto还不够吗?

返回

操作结果不会提供有关要返回的实际对象的线索。我错过了什么吗?

Web API

是一个灵活的平台 - 您可以编写始终只返回特定结果类型(例如您的CustomerDto)的简单 API,也可以编写真正关心 HTTP 语义并希望更好地控制状态代码、其他 HTTP 标头等的更复杂的 API。

或者,您的方法可能正在处理具有更复杂的表示形式的"资源",这些表示形式不容易由 C# 中的单个 DTO 类建模,因此您需要多种可能的"返回类型"的灵活性。

如果您不想要这种级别的控制,是的,您可以继续并返回您的 DTO 类型。没有人(据我所知)强迫你改用ActionResult

在 ASP.NET Core中,以前的MVC"控制器"类和Web Api"ApiController"类合并为一个"控制器"类。ActionResult 方法,这是一种经典的 MVC 方法,在构建 MVC 应用程序时很有用,其中也包含在合并中,这就是原因它在构建 Web API 时也可用。

如果您注意到 .NET Core Web API 的预生成项目,并非所有函数都返回 ActionResultIActionResult 。所以是的,您完全可以返回类似 CustomerDto .这样,您可以将对象作为 json 返回,状态代码为 200。但是,假设您的操作正在接受一些输入,并且您并不总是确定是否会有有效的输出。在这种情况下,仅当成功时才需要返回状态代码 200,如果用户发送了无效数据或任何其他状态代码,则需要返回状态代码 400 (badRequest)。这是处理 http 请求的标准方法。

因此,通过使用IActionResult,您可以使用return Json(customer)return Ok(customer)返回CustomerDto对象,也可以在遇到错误时返回使用BadRequest(myErrors)

有多种方法可以设计 Web API。在您的情况下,您可以退回客户Dto。根据文档 (https://learn.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results),Web API 控制器操作可以返回以下任何内容: -无效 - HttpResponseMessage - IHttpActionResult - 其他类型

通过使用 IHttpActionResult,您可以更好地控制 Http Reponse 代码。

最新更新