场景:在.net核心控制器上实现标准REST API / GET方法。
documentation表示OkObjectResult是一个状态为200的ObjectResult。这可以通过从ControllerBase继承的Ok(myResult)
方法获得。我认为这是一种方便的方法。
但是,tutorial未使用此方法 - 而是返回new ObjectResult(myResult)
,默认为状态200。
这两种方法有什么区别吗?
答案 0 :(得分:31)
技术上两种方法没有区别。
如果您想查看OkObjectResult
的代码,那么您会看到OkObjectResult
是ObjectResult
,它设置了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错误。