我有ASP.NET Web Api控制器的这个例子:
public Mea Get(Int32 id)
{
try
{
return Meas.GetById(id) ?? new Mea(-1, 0D, 0D);
}
catch (Exception)
{
return new Mea(-1, 0D, 0D);
}
}
如果GetById返回null或者在catch异常中,我希望能够返回不同的响应代码。 我看到的所有示例都使用HttpResponseMessage,您可以在其中添加响应代码。 我的问题是如何在不使用HttpResponseMessage时更改响应代码,如上例所示?
答案 0 :(得分:1)
如果您想要从函数返回不同的响应代码,那么您必须将其包装在HttpResponseMessage
中。
您的功能将始终返回状态代码“200”。即使您返回一个裸对象,框架管道也会将其转换为HttpResponseMessage
,默认状态代码为HttpStatusCode.OK
,所以您最好自己动手。
我建议不要从API函数返回裸对象/值。始终将值包装在HttpResponseMessage
中,然后从函数中返回响应消息。通过将其包装在HttpResponseMessage
中,您可以在客户端使用正确的状态代码。返回HttpResponseMessage
始终是最佳做法。
所以请改变你的功能
public HttpResponseMessage Get(Int32 id)
{
try
{
// on successful execution
return this.Request.CreateResponse(HttpStatusCode.OK, Meas.GetById(id) ?? new Mea(-1, 0D, 0D));
}
catch (Exception)
{
return this.Request.CreateResponse(HttpStatusCode.InternalServerError, Mea(-1, 0D, 0D));
}
}
如果出现错误,您也可以抛出HttpResponseException
答案 1 :(得分:0)
您可以抛出System.Web.Http.HttpResponseException
,指定HTTP状态代码和/或可选择返回给客户端的整个HttpResponseMessage
。