Controller methods return ActionResult 的原因是什么? (ASP.NET 核心网站 API)

What's the reason why Controller methods return ActionResult? (ASP.NET Core Web API)

我对 Web API 还很陌生。我观察到一些方法 return 和 ActionResult。这是为什么?例如, return 代替 CustomerDto 还不够吗?

返回 ActionResult 不会提供有关正在 returned 的实际对象的任何线索。我错过了什么吗?

有多种设计 Web 的方法 API。在您的情况下,您可以 return CustomerDto。根据文档 (https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results),Web API 控制器操作可以 return 以下任何一项: - 空白 - HttpResponseMessage - IHttpActionResult - 一些其他类型

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

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

或者您的方法可能正在处理 "resources",它具有更复杂的表示形式,无法通过 C# 中的 单个 DTO class 轻松建模,所以你想要多个可能的灵活性 "return types".

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

在 ASP.NET Core 中,前 MVC "Controller"-class 和 Web Api "ApiController"-class 合并到一个 "Controller"-class。 ActionResult 方法,这是一个 classic MVC 方法,在构建 MVC 应用程序时很有用,它也包含在合并中,这就是为什么 它在构建 Web Api.

时可用

如果您注意到.net core web 的预构建项目api,并非所有功能return ActionResultIActionResult。所以是的,你完全可以 return 像 CustomerDto 这样的东西。通过这种方式,您可以 return 对象 json,状态代码为 200。但是,假设您的操作正在接受一些输入,您并不总是确定是否会有有效输出。在这种情况下,您将希望 return 状态代码仅在成功时为 200,如果用户发送了无效数据或任何其他状态代码则为 400(badRequest)。这是处理http请求的标准方式。

因此,通过使用 IActionResult,您可以使用 return Json(customer)return Ok(customer) return 一个 CustomerDto 对象,或者您可以 return 当你 运行 出错时使用 BadRequest(myErrors)