(一)
var person = repository.GetPerson(id)
return person;
(二)
var person = repository.GetPerson(id)
return Ok(person);
根据开发者工具,结果是一样的,状态码都是200,有什么区别吗?如果没有区别,我应该使用 Ok() 方法还是 OkResult ?
假设这两个示例都是 HTTP GET 调用端点内的代码,那么它们实际上是相同的。
实现上可能略有不同,但最终结果是相同的:两种情况下的有效负载都是相同的(例如 JSON 或其他表示形式),并且状态代码将相同,
200
。
不过,使用
return Ok(person)
是一个很好的做法,因为这比 return person
更简洁,并且更清楚地揭示了意图。你也可以做return new OkObjectResult(person)
,这是意图揭示但不简洁。 (参考:OkObjectResult)。
最后,OkResult 仅应在您不想返回有效负载时使用。这相当于
return Ok()
。
另一个差异是由
ActionResult<T>
上的两次隐式转换引起的。
一个来自常规的
ActionResult
。 Ok("string)
是一个 ActionResult
(更具体地说是一个 OkObjectResult
)。因此,返回 ActionResult<User>
的方法将允许 return Ok("string")
。
第二个隐式转换来自
T
。因此 return new User()
也会隐式转换为 ActionResult<User>
。
这意味着,虽然
Ok(object)
非常有用,但如果您避免使用 Ok()
并坚持返回实际对象,编译器更有可能出现类型错误。