2014-08-28 2 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.

Я не хочу менять подпись метода, так как это очень полезно для целей документации. Я могу добавить заголовок Location, используя HttpContext.Current.Response..., но не смог установить код состояния.

У кого-нибудь есть лучшая идея?

ответ

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

это не хороший ответ. он не заслуживает нисходящего звена, потому что он делает именно то, что он говорит, но бросать исключения, чтобы получить желаемое поведение здесь, это Wack hacky. –

+0

Использовать исключение, чтобы указать нормальный результат, не является разумным ответом. –

+0

Из двух статей рекомендуется использовать www.asp.net для установки определенного кода состояния и возврата пользовательского объекта. – Nhan