使用 WebAPI 2 的 HttpResponseMessage 和 Task<IHttpActionResult> 之间发送回的内容是否有区别?
-
21-12-2019 - |
题
这是我刚刚使用脚手架创建的一些新代码:
[ResponseType(typeof(Exam))]
public async Task<IHttpActionResult> GetExam(int id)
{
...
return Ok(exam);
}
以前我有这样的代码:
public HttpResponseMessage GetExam(int id)
{
...
return Request.CreateResponse(HttpStatusCode.OK, exam);
}
有人可以评论一下这些变化背后的原因吗?为什么现在建议使用返回类型“Ok”,这与编码 HttpResponseMessage 不同吗?我还没有找到任何关于此的文档,特别是我想知道 ResponseType 正在做什么?任何建议将不胜感激。
解决方案
在 Web API 版本 1 中,您可以通过返回值来返回 HTTP 200,或者必须构造一个 HttpResponseMessage
返回任何其他东西。
在 Web API 2 中, IHttpActionResult
以及相关的 Ok()
, BadRequest()
, Created()
, , ETC ApiController
添加方法是为了简化许多您只想使用不同状态代码进行响应的情况。在幕后,Web API 调用 IHttpActionResult.ExecuteAsync()
将其转换为 HttpResponseMessage
.
有关更多详细信息,请参阅: Web API 2 中的操作结果
至于 ResponseType
属性,主要是在返回的action中指定返回类型 IHttpActionResult
和 HttpResponseMessage
以便Web API可以生成帮助文档。以前,这必须通过 config.SetActualResponseType()
.
更多细节: 响应类型属性
不隶属于 StackOverflow