Как вернуть HTTP 429?
Я реализую API с использованием WCF, и в спецификации говорится, что при определенных обстоятельствах нужно возвращать HTTP 429.
Обычно я бы просто написал:
throw new WebFaultException(HttpStatusCode.NotFound);
Однако перечисление HttpStatusCode не содержит 429.
Я, очевидно, могу привести к перечислению
throw new WebFaultException((HttpStatusCode)429);
Однако я беспокоюсь, что это не приведет к правильному результату для приложения, вызывающего мой API.
Каков наилучший способ создания расширения HttpStatusCode и отправки действительных (но не поддерживаемых) статусов HTTP?
4 ответа
Набор значений, которые может принимать тип 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