5

有没有办法为 Web API 控制器中的方法指定成功返回码?

我的初始控制器结构如下

public HttpResponseMessage PostProduct(string id, Product product)
{   
var product= service.CreateProduct(product);
return Request.CreateResponse(HttpStatusCode.Created, product);
}

但是,当您生成 Web API 帮助页面时,上述方法存在缺陷。Web API 帮助页面 API 无法自动解码强类型产品是响应,因此在其文档中生成示例响应对象。

所以我采用下面的方法,但这里的成功代码是OK (200)而不是Created (201). 无论如何,我可以使用一些属性样式语法来控制方法的成功代码吗?另外,我还想将 Location 标头设置为创建的资源可用的 URL - 同样,当我处理HttpResponseMesage.

public Product PostProduct(string id, Product product)
{   
var product= service.CreateProduct(product);
return product;
}
4

2 回答 2

3

关于您在下面的观察:

However, there is drawback to the above approach when you generate Web API help pages. The Web API Help page API cannot automatically decode that the strongly typed Product is the response and hence generate a sample response object in its documentation.

您可以查看HelpPageConfig.cs随 HelpPage 包安装的文件。它有一个完全适用于像您这样的场景的示例,您可以在其中设置响应的实际类型。

在 Web API 的最新版本(5.0 - 当前为 RC)中,我们引入了一个名为的属性ResponseType,您可以使用它来用实际类型装饰动作。您将能够将此属性用于您的方案。

于 2013-09-27T04:34:57.050 回答
1

我这样做:

[HttpGet]
public MyObject MyMethod()
{
    try
    {
        return mysService.GetMyObject()
    }
    catch (SomeException)
    {
        throw new HttpResponseException(
            new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content =
                        new StringContent("Something went wrong.")
                });
    }
}

如果你没有得到你所期望的,抛出一个 HttpResponseException。

于 2013-09-27T12:37:04.127 回答