不使用HttpResponseMessage时如何更改响应代码?

时间:2013-10-30 21:37:10

标签: asp.net-web-api

我有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时更改响应代码,如上例所示?

2 个答案:

答案 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