2014-03-26 36 views
6

我已经开始使用[ResponseType]属性装饰我的IHttpActionResult方法,目的是让消费者更容易知道如何处理响应。哪个ResponseType应该用于PUT或POST请求的IHttpActionResult?

这对GET有意义,因为我可能会想要对返回的数据做些什么。
但是[ResponseType]对PUT或POST请求有任何意义,它们不返回任何数据,只是成功的代码?

例如

[HttpPut] 
[Route("Contact/{contactId:int}/name", Name = "UpdateContactName")] 
[ResponseType(typeof(?????))] // <- what should I put here? do I even need it at all? 
public IHttpActionResult UpdateName(int contactId, [FromBody] string name) 
{ 
    //... 
    return StatusCode(HttpStatusCode.Accepted); 
} 

回答

8

事实证明,[ResponseType]确实在控制器方法不返回数据有意义。

可以使用void类型,以确保的WebAPI帮助文件没有为这些方法显示“样品不可用”的消息。

[ResponseType(typeof(void))] 
1

我可能失去了一些东西,但我个人觉得下面的方法更优雅和信息

[HttpPut] 
public IHttpActionResult Approve(long id) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(); 
    } 
    // ..... 
    // ..... 



    bool success = false;// this is just a flag to indicate operation progress 

    // Do Update... 

    return Ok(sucess); 
} 

而不是具有控制器不返回任何数据我会返回'类似'好的(真)取决于操作的成功或失败。

+0

但是,如果方法失败,为什么你会返回OK?现在客户端也需要检查HTTP状态码和内容。对不起,但我不认为这是有道理的。 – demoncodemonkey

+0

如果你多留心我说看我的回答:“我会回来‘像’好吧(真),这表示你可以根据你的操作是成功还是失败的其它响应类型。我编辑的代码,虽然涵盖了这一点。整点是客户端需要通知他/她的请求的操作。 – MHOOS

相关问题