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 codes
和 JSON
结果的 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 调用中的空子类
从 Axios 请求返回 ASP.NET Core API 中的下载文件