在ASP.NET Core API中,IActionResult、ObjectResult和JsonResult有什么区别?

9

在返回同时包含HTTP状态码JSON结果的Web API中,最好使用哪个选项?

我一直使用IActionResult,但它总是用于Web App与Web API。这次只涉及Web API。

我有以下简单方法,但遇到了如下错误:

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

[HttpGet]
public Task<IActionResult> Get()
{
   return Ok();
}

1
这个链接应该能解答部分问题。除此之外, IActionResult 可以同时支持状态码和 JSON 对象。 - Kirk Larkin
1
返回最适合请求需求的对象。至于操作方法的定义,使用IActionResult进行定义,以允许使用抽象而不是紧密耦合的具体实现,从而提高灵活性。 - Nkosi
1
因为该方法不是异步的。 - CodeCaster
1
@Sam 不需要。该方法/操作体不是异步的,因此您必须返回一个任务,否则完全删除任务并仅返回 IActionResult - Nkosi
1
@Sam,这是一篇不错的文章,你应该阅读一下:http://hamidmosalla.com/2017/03/29/asp-net-core-action-results-explained/ - Nkosi
显示剩余6条评论
1个回答

23

返回最适合请求需要的对象。至于操作的方法定义,使用IActionResult进行定义,以允许使用抽象而不是紧密耦合的具体实现。

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

当调用上述动作时,将返回200 OK响应。

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

上述操作将返回状态码为 200 的响应以及内容。不同之处在于它允许内容协商,因为它没有被特别限制为JSON。

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

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

这是一篇关于该主题的非常好的文章。

解析Asp.Net Core Action Results


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接