ASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult

Posted

技术标签:

【中文标题】ASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult【英文标题】:IActionResult vs ObjectResult vs JsonResult in ASP.NET Core API 【发布时间】:2018-03-31 15:22:40 【问题描述】:

在将返回 HTTP status codesJSON 结果的 Web API 中使用的最佳选项是什么?

我一直使用IActionResult,但它始终是带有 Web API 的 Web 应用程序。这次是只有 Web API

我有以下简单的方法,它给了我一个错误:

无法隐式转换类型 Microsoft.AspNetCore.Mvc.OkObjectResult 到 System.Threading.Tasks.Task Microsoft.AspNetCore.Mvc.IActionResult

[HttpGet]
public Task<IActionResult> Get()

   return Ok();

【问题讨论】:

This 应该有助于解决部分问题。最重要的是,IActionResult 将同时支持状态码和 JSON 对象。 返回最适合请求需要的对象。至于动作的方法定义,用 IActionResult 定义它,以允许灵活地使用抽象来代替紧耦合的具体实现 因为方法不是异步的。 @Sam 没有。方法/动作主体不是异步的,因此您必须返回一个任务,否则完全删除该任务并返回 IActionResult @Sam 这是一篇不错的文章,你应该阅读hamidmosalla.com/2017/03/29/… 【参考方案1】:

返回最适合请求需求的对象。至于动作的方法定义,用IActionResult 定义它,以允许灵活地使用抽象来代替紧密耦合的具体。

[HttpGet]
public IActionResult Get() 
   return Ok();

上述动作在调用时会返回 200 OK 响应。

[HttpGet]
public IActionResult Get() 
   var model = SomeMethod();
   return Ok(model);

以上内容将返回 200 OK 响应。不同之处在于它允许内容协商,因为它并不特别限于 JSON。

[HttpGet]
public IActionResult Get() 
   var model = SomeMethod();
   return Json(model);

以上只会返回 Json 内容类型。

关于这个主题的一篇非常好的文章

Asp.Net Core Action Results Explained

【讨论】:

以上是关于ASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类

ASP.Net Core API 中的请求验证

ASP.Net Core Web API 中的安全用户操作

从 Axios 请求返回 ASP.NET Core API 中的下载文件

这是从 ASP.NET Core Web API 中的 EF Core 5 获得的啥样的响应 [关闭]

ASP.Net Core Web Api 中的异步视频流不起作用