2015-04-21 2 views
18

Есть ли способ обработать код статуса http 422 изящно. Я ищу лучшую практику здесь. Я знаю, что HttpStatusCode это перечисление так, что я попробовал это,System.Net Класс HttpStatusCode не имеет кода 422

HttpStatusCode Unprocessable = (HttpStatusCode)422; 
if (Response == (HttpStatusCode)422) 

, но не позволяет мне сравнивать его. Я здесь что-то не так?

Каким образом можно добавить этот код состояния во время выполнения.

+0

Просто проверьте это [link] (https://msdn.microsoft.com/en-us/library/system.net.httpstatuscode (v = vs.110) .aspx), нет кода статуса 422 – Peyman

+0

thats что я пытаюсь спросить .... если я хочу использовать 422, могу ли я расширить это перечисление? – golldy

+0

Нет, вы не можете, почему вы хотите расширить перечисление ResponseCode. Это использует стандартный код ответа. http://stackoverflow.com/questions/757684/enum-inheritance – Peyman

ответ

12

Я использовал RestSharp, который возвращает код состояния ответа сервера в свойстве типа HttStatusCode, и мне нужно было проверить ответ 422 сам, но, конечно, тип его не включает. К счастью, я все еще был в состоянии проверить, используя следующее:

if(response.StatusCode == (HttpStatusCode)422) 
{ 
    // Do my stuff.. 
} 
+0

Прохладный, рад слышать, что это работает. Имеет смысл, поскольку enum на самом деле является int. – Matt

1

Если более одного действия в вашем API может возможно возвращать 422, вы могли бы рассмотреть возможность оборачивать проверки в метод расширения следующим образом:

public static bool IsUnprocessableEntityResponse(this HttpResponseMessage message) 
    { 
     Requires.NotNull(message, nameof(message)); 

     return (int) message.StatusCode == StatusCodes.Status422UnprocessableEntity; 
    } 

Что вы можете использовать в вашем клиенте так:

if (response.IsUnprocessableEntityResponse()) 
     return Response.UnprocessableEntity<Resource>(); 

Хотя также избежать 422 магического числа в исходном коде, в то же время.

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