‘返回对象’和‘返回Ok(对象)’之间的区别

问题描述 投票:0回答:2

(一)

var person = repository.GetPerson(id)
return person;

(二)

var person = repository.GetPerson(id)
return Ok(person);

根据开发者工具,结果是一样的,状态码都是200,有什么区别吗?如果没有区别,我应该使用 Ok() 方法还是 OkResult ?

asp.net-web-api
2个回答
3
投票

假设这两个示例都是 HTTP GET 调用端点内的代码,那么它们实际上是相同的。

实现上可能略有不同,但最终结果是相同的:两种情况下的有效负载都是相同的(例如 JSON 或其他表示形式),并且状态代码将相同,

200

不过,使用

return Ok(person)
是一个很好的做法,因为这比
return person
更简洁,并且更清楚地揭示了意图。你也可以做
return new OkObjectResult(person)
,这是意图揭示但不简洁。 (参考:OkObjectResult)。

最后,OkResult 仅应在您不想返回有效负载时使用。这相当于

return Ok()


0
投票

另一个差异是由

ActionResult<T>
上的两次隐式转换引起的。

一个来自常规的

ActionResult
Ok("string)
是一个
ActionResult
(更具体地说是一个
OkObjectResult
)。因此,返回
ActionResult<User>
的方法将允许
return Ok("string")

第二个隐式转换来自

T
。因此
return new User()
也会隐式转换为
ActionResult<User>

这意味着,虽然

Ok(object)
非常有用,但如果您避免使用
Ok()
并坚持返回实际对象,编译器更有可能出现类型错误。

© www.soinside.com 2019 - 2024. All rights reserved.