2014-08-28 73 views
1

我有以下Api Controller的ASP.NET Web API设置自定义状态代码

[HttpPost] 
public User Create(User user) 
{ 
    User user = _domain.CreateUser(user); 
    //set location header to /api/users/{id} 
    //set status code to 201 
    //return the created user 
} 

好像我们不得不依靠Request.CreateResponse(..)和更改控制器的签名,以返回IHttpActionResult

我不想更改方法签名,因为它对于文档目的非常有用。我能够使用HttpContext.Current.Response...添加Location标题,但无法设置状态码。

有人对此有更好的想法吗?

回答

1

因为您在void,HttpResponseMessage和IHttpActionResult之外使用自定义(其他)返回类型 - 指定状态代码更困难。见Action Results in Web API 2

Exception Handling in Web API.如果你想坚持不修改返回类型,那么这可能是一些你可以做的设置状态代码:

[HttpPost] 
public User Create(User user) 
{ 
    User user = _domain.CreateUser(user); 
    //set location header to /api/users/{id} 

    //set status code to 201 
    if (user != null) 
    { 
     //return the created user 
     throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Created, user); 
    } 
    else 
    { 
     throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.InternalServerError));   
    } 
} 
+1

这不是一个很好的答案。它不应该得到一个downvote,因为它的确如它所说的那样,但抛出异常来获得期望的行为在这里是很方便的。 – 2015-11-13 08:32:23

+0

使用例外来表示正常结果不是合理的答案。 – 2016-08-25 03:19:33

+0

从这两篇文章中,www.asp.net推荐的方法是设置特定的状态码并返回一个自定义对象。 – Nhan 2017-10-05 00:47:37

相关问题