有没有办法在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;
}
答案 0 :(得分: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.
您可以查看使用HelpPage包安装的HelpPageConfig.cs
文件。它有一个完全适用于您的场景的示例,您可以在其中设置响应的实际类型。
在Web API的最新版本(5.0 - 当前RC)中,我们引入了一个名为ResponseType
的属性,您可以使用该属性来设置实际类型的操作。您可以将此属性用于您的方案。
答案 1 :(得分: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。