8

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

我目前正在 IIS 7.5.7600.16385、VS 2010 Professional、Windows 7 64-bit Professional 上调试。

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 源代码中找到它。

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

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

4

2 回答 2

10

HttpContext.Current是过去的宿醉。

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

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

更新

正如您可能从评论中注意到的那样,这种方法适用于beta版本。不是RC。

于 2012-04-27T21:07:44.890 回答
-1

试试这个:

return Request.CreateResponse<MyResource>(HttpStatusCode.Created, createdResource);
于 2017-02-10T08:43:18.997 回答