Как вернуть HTTP 429?

Я реализую API с использованием WCF, и в спецификации говорится, что при определенных обстоятельствах нужно возвращать HTTP 429.

Обычно я бы просто написал:

throw new WebFaultException(HttpStatusCode.NotFound);

Однако перечисление HttpStatusCode не содержит 429.

Я, очевидно, могу привести к перечислению

throw new WebFaultException((HttpStatusCode)429);

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

Каков наилучший способ создания расширения HttpStatusCode и отправки действительных (но не поддерживаемых) статусов HTTP?

4 ответа

Решение

Из спецификации языка C# 5.0:

Набор значений, которые может принимать тип enum, не ограничен его членами enum. В частности, любое значение базового типа перечисления может быть приведено к типу перечисления и является отличным допустимым значением этого типа перечисления.

Так что это вполне нормально и будет вашим лучшим выбором:

throw new WebFaultException((System.Net.HttpStatusCode)429);

Если кто-то использует шаблон webApi, в котором контроллер возвращает IActionResultобъект.

      return new StatusCodeResult(429);

Это сработало для меня.

Если вы размещаете службу WCF с IIS, вы можете включить режим совместимости ASP.Net. После этого вы можете установить статус HttpContext.Current.Response.StatusCode равным 429.

С этим сказал. Я думаю, что ваша лучшая ставка - попытаться привести 429 к HttpStatusCode и посмотреть, что произойдет. Если это работает, вы можете избавить себя от головной боли.

Вы можете напрямую использовать HttpStatusCode

HttpStatusCode.TooManyRequests

Другие вопросы по тегам