无法让ASP.NET 4 Web API为成功POST返回状态代码“201 - Created”

时间:2012-04-27 20:38:44

标签: asp.net-mvc-4 asp.net-web-api

我正在尝试使用ASP.NET 4 Web API为RESTful POST操作返回201 Created的HTTP状态代码,但我总是得到200 OK

我目前正在调试IIS 7.5.7600.16385,VS 2010 Professional,Windows 7 64位专业版。

public MyResource Post(MyResource myResource)
{
    MyResource createdResource;
    ...
    HttpResponse response = HttpContext.Current.Response;
    response.ClearHeaders(); // added this later, no luck
    response.ClearContent(); // added this later, no luck
    response.StatusCode = (int)HttpStatusCode.Created;
    SetCrossOriginHeaders(response);
    return createdResource;
}

我已经看到了在返回数据之前设置HttpContext.Current.Response.StatusCode的其他示例,所以我认为这不是问题。我还没有在MVC 4源代码中找到它。

(这与我对this question的调查有关,但主题不同以保证自己的问题)

我不确定问题是IIS还是Web API。我会做进一步的测试来缩小范围。

2 个答案:

答案 0 :(得分:9)

HttpContext.Current是过去的宿醉。

您需要将响应定义为HttpResponseMessage<T>

public HttpResponseMessage<MyResource> Post(MyResource myResource)
{
    .... // set the myResource
    return new HttpResponseMessage<MyResource>(myResource)
            {
                StatusCode = HttpStatusCode.Created
            };
}

更新

正如您在评论中可能会注意到的,此方法适用于 beta 版本。 RC。

答案 1 :(得分:-1)

试试这个:

return Request.CreateResponse<MyResource>(HttpStatusCode.Created, createdResource);