2013-02-19 6 views
36

В Asp.net Web Api, как мне установить код состояния моего ответа с помощью int или string, а не перечисления StatusCode?Asp.net Web Api устанавливает код состояния ответа на номер

В моем случае я хотел бы вернуть ошибки проверки с кодом состояния 422, «Непроцессорная сущность», но для этого нет перечислителя.

HttpResponseMessage response = Request.CreateResponse(); 
response.StatusCode = HttpStatusCode.UnprocessableEntity; //error, not in enum 

ответ

39

Вы можете использовать любой int для HttpStatusCode.

response.StatusCode = (HttpStatusCode)422; 

Вы также можете:

HttpResponseMessage response = Request.CreateResponse((HttpStatusCode)422, "Unprocessable Entity"); 
+0

Спасибо! Именно то, что мне нужно! В вашем втором примере второй параметр предназначен для содержимого ответа. Передача «Непроцессная сущность» может быть немного избыточной. Например, я делаю это: Request.CreateResponse ((HttpStatusCode) 422, validationErrors); –

+0

Yeh, вот и все! Второй параметр может быть любым. =) – lolol

+2

Метод расширения CreateResponse можно найти в пространстве имен «System.Net.Http». –

10

Я в конечном итоге создать класс для этого:

public class HttpStatusCodeAdditions 
    { 
     public const int UnprocessableEntityCode = 422; 
     public static HttpStatusCodeAdditions UnprocessableEntity = new HttpStatusCodeAdditions(UnprocessableEntityCode); 

     private HttpStatusCodeAdditions(int code) 
     { 
      Code = code; 
     } 
     public int Code { get; private set; } 

     public static implicit operator HttpStatusCode(HttpStatusCodeAdditions addition) 
     { 
      return (HttpStatusCode)addition.Code; 
     } 
    } 

, которые могут быть использованы, как это:

response.StatusCode = HttpStatusCodeAdditions.UnprocessableEntity; 
+0

Приятный и чистый, мне это нравится! – NinjaCross

Смежные вопросы