繁体   English   中英

Controller方法返回ActionResult的原因是什么? (ASP.NET Core Web API)

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

我是Web API的新手。 我观察到一些方法返回ActionResult 这是为什么? 例如,返回CustomerDto还不够吗?

返回ActionResult不提供有关返回实际对象的任何线索。 我想念什么吗?

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

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

Web API是一个灵活的平台-您可以编写简单的API,这些API始终仅返回特定的结果类型(例如CustomerDto ),也可以编写更复杂的API,这些API确实关心HTTP语义,并希望对状态代码进行更多控制,其他HTTP标头等

也许您的方法正在处理“资源”,这些资源具有更复杂的表示形式,而这些复杂的表示形式很难用C#中的单个 DTO类进行建模,因此您需要多种可能的“返回类型”的灵活性。

如果您不希望这种控制级别,可以的,您可以继续并只返回DTO类型。 据我所知,没有人强迫您使用ActionResult

在ASP.NET Core中,以前的MVC“控制器”类和Web Api“ ApiController”类合并到一个“ Controller”类中。 ActionResult方法是一种经典的MVC方法,在构建MVC应用程序时非常有用,它也包含在合并后的位置,这就是为什么在构建Web Api时也可以使用它的原因。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM