Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 不使用HttpResponseMessage时如何更改响应代码?_Asp.net Web Api - Fatal编程技术网

Asp.net web api 不使用HttpResponseMessage时如何更改响应代码?

Asp.net web api 不使用HttpResponseMessage时如何更改响应代码?,asp.net-web-api,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); } } 如果G

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

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

如果希望从函数返回不同的响应代码,则必须将其包装在
HttpResponseMessage

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

我建议不要从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

,我认为这是不可能的。为什么您不喜欢
HttpResponseMessage
?@sunil这只是为了方便编码,当您查看方法声明时,您可以看到它返回的内容,而不仅仅是一般的HttpResponseMessage…为什么返回HttpResponseMessage始终是最佳实践?返回对象有什么问题?@user1615362:即使返回对象,框架也会自动将其包装在HttpResponseMessage中。通过以HttpResponseMessage的形式返回,您可以从api函数中对响应进行更多控制,如果将来需要,您还可以轻松自定义响应。从类型安全的角度来看,最好返回一个“对象”。根据情况,更改HttpResponseCode时,您还可能希望返回不同类型的响应对象,例如,包括“错误原因”属性。如果您想在控制器中处理错误情况,这似乎是一条可行之路。也可以阅读微软的文章。