ASP.NET Web API设置自定义状态代码

时间:2014-08-28 04:05:40

标签: asp.net header asp.net-web-api

我有以下Api Controller

[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

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

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

1 个答案:

答案 0 :(得分:2)

因为您在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));        
    }
}