0

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

4

2 回答 2

1

好吧,如果您想从函数返回不同的响应代码,那么您必须将其包装在HttpResponseMessage.

您的函数将始终返回状态代码“200”。即使您返回一个裸对象,框架管道也会将其转换为HttpResponseMessage具有默认状态代码的对象HttpStatusCode.OK,因此您最好自己完成。

我建议不要从您的 API 函数返回裸对象/值。始终将值包装在 a 中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

于 2013-10-31T08:49:04.030 回答
0

你可以抛出一个System.Web.Http.HttpResponseException,指定一个 HTTP 状态码和/或可选的一个整体HttpResponseMessage返回给客户端。

于 2013-10-31T08:31:33.183 回答