使用 WebAPI 2 的 HttpResponseMessage 和 Task<IHttpActionResult> 之间发送回的内容是否有区别?

StackOverflow https://stackoverflow.com//questions/23045125

这是我刚刚使用脚手架创建的一些新代码:

    [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中指定返回类型 IHttpActionResultHttpResponseMessage 以便Web API可以生成帮助文档。以前,这必须通过 config.SetActualResponseType().

更多细节: 响应类型属性

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top