使用WebAPI 2在HttpResponseMessage和Task <ihttpactionresult>之间发回的内容是否存在差异?</ihttpactionresult>

时间:2014-04-13 16:18:34

标签: asp.net asp.net-web-api asp.net-web-api2

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

    [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正在做什么?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

在Web API版本1中,您可以通过返回值返回HTTP 200,或者您必须构造HttpResponseMessage以返回任何其他内容。

在Web API 2中,添加了IHttpActionResult以及关联的Ok()BadRequest()Created()ApiController方法,以简化许多您只是简单的情况想要用不同的状态代码回复。在幕后,Web API调用IHttpActionResult.ExecuteAsync()将其转换为HttpResponseMessage

有关详细信息,请参阅:Action Results in Web API 2

对于ResponseType属性,它主要指定返回IHttpActionResultHttpResponseMessage的操作中的返回类型,以便Web API可以生成帮助文档。以前,这必须通过config.SetActualResponseType()完成。

更多详情:ResponseTypeAttribute