请考虑ASP.NET Core Web API控制器方法的以下方法签名:
public JsonResult GetById(string id);
public async Task<SomeObject> GetById(string id);
public SomeObject GetById(string id)
在默认设置中,所有都将 SomeObject
的JSON表示返回给客户端 . 框架是否以不同方式对待它们?如果是,那么何时应该使用它?
例如,大多数文档建议使用由辅助函数(如 OK()
)生成的 IActionResult
实现 . 然而,所有这些似乎为你做的是设置StatusCode,并且它们具有混淆你的方法返回的内容的缺点 - 实际上你可以在不同的情况下返回不同的类型,我认为这是一个可怕的想法 . 连锁效应是像Swagger这样的工具无法预测该方法将返回什么 .
所以我更愿意回复 SomeObject
:
-
我错过了重要的事情吗?
-
返回
Task<SomeObject>
有什么好处 - 它总是有用,还是只有方法使用异步调用?
Edit: 尝试澄清 - 所有签名都将 SomeObject
的JSON表示返回给客户端,但从C#的角度来看,它们具有不同的返回类型,因此MVC框架正在做一些转换它们的工作 .
哪个是最佳做法,为什么?是否有充分的理由返回 JsonResult
而不是返回 SomeObject
?应该总是使用返回 Task<SomeObject>
,还是只有动作中有异步代码才有 Value (我假设)?
1 回答
您在搜索什么是ASP.NET核心中的
formatters
以及它们的工作原理 . 从官方文件:您还需要阅读
Content Negotiation
:最后在
JsonResult
范围内使用:阅读Formatting Response Data部分的更多内容 .