Как вернуть HTTP 429?
Я реализую API с использованием WCF, и в спецификации говорится, что в некоторых случаях возвращать HTTP 429.
Обычно я просто пишу:
throw new WebFaultException(HttpStatusCode.NotFound);
Однако перечисление HttpStatusCode не содержит 429.
Я могу, очевидно, применить к перечислению
throw new WebFaultException((HttpStatusCode)429);
Однако я беспокоюсь, что это не приведет к правильному результату для приложения, вызывающего мой API.
Какой лучший способ создать расширение HttpStatusCode и отправить действительные (но неподдерживаемые) статусы HTTP?
Ответы
Ответ 1
Из С# Language Specification 5.0:
Набор значений, которые может принимать тип перечисления, не ограничен его перечислять членов. В частности, любое значение базового типа enum может быть перенесено в тип перечисления и является отдельным действительным значением этот тип перечисления.
Итак, это вполне нормально, и вам будет лучше:
throw new WebFaultException((System.Net.HttpStatusCode)429);
Ответ 2
Если вы размещаете службу WCF с помощью IIS, вы можете включить Режим совместимости ASP.Net. С этим вы можете установить статус HttpContext.Current.Response.StatusCode до 429.
Сказанное. Я думаю, ваш лучший выбор - попробовать перевести 429 в HttpStatusCode и посмотреть, что произойдет. Если это сработает, тогда вы можете сэкономить головную боль.