【问题标题】:IActionResult vs ObjectResult vs JsonResult in ASP.NET Core APIASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult
【发布时间】: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/…

标签: asp.net asp.net-core asp.net-web-api .net-core asp.net-core-webapi


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-11-13
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2021-05-23
    • 2020-05-10
    • 2016-12-11
    相关资源
    最近更新 更多