Ok()方法新的ObjectResult()之间有什么区别吗?

时间:2016-09-15 13:17:13

标签: c# asp.net-core asp.net-core-mvc

场景:在.net核心控制器上实现标准REST API / GET方法。

documentation表示OkObjectResult是一个状态为200的ObjectResult。这可以通过从ControllerBase继承的Ok(myResult)方法获得。我认为这是一种方便的方法。

但是,tutorial未使用此方法 - 而是返回new ObjectResult(myResult),默认为状态200。

这两种方法有什么区别吗?

3 个答案:

答案 0 :(得分:31)

技术上两种方法没有区别。

如果您想查看OkObjectResult的代码,那么您会看到OkObjectResultObjectResult,它设置了200状态代码,默认为{{1}已经。

我唯一的区别是代码可读性以及您自己或您的团队偏好。这完全取决于命名和你想要强调的意图。

ObjectResult

答案 1 :(得分:3)

我只能看到在某处依赖某个默认值并明确提供此值的区别 - 后者通常更好,而OkObjectResult(或明确设置StatusCode)的意图更清晰,这很重要。 ObjectResult的默认StatusCode没有200 - 默认情况下它实际上为null。但是,HttpResponse的默认状态代码为200,因此无论如何它的工作方式都相同。

答案 2 :(得分:2)

更新: 原来问题的两种方法+公认答案中的第三种方法现在都已被替换,只需直接返回对象即可。

 return myResult

当前tutorial页上的相关示例和说明:

[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);    
    if (todoItem == null)
    {
        return NotFound();
    }    
    return todoItem;
}
  

GetTodoItems和GetTodoItem方法的返回类型为ActionResult 类型。 ASP.NET Core会自动将该对象序列化为JSON,并将JSON写入响应消息的正文中。假定没有未处理的异常,则此返回类型的响应代码为200。未处理的异常会转换为5xx错误。