Posted at

HttpStatusCodeで429を扱う

More than 1 year has passed since last update.

気になったので調べてみた。

HttpStatusCode 429 TooManyRequest

https://tools.ietf.org/html/rfc6585#section-4

2012年くらいに作られた定義。アクセス過多などによりレート制限がかかった場合のステータス。

400代は基本的にノーリトライだと考えてたけど、これのおかげで単純に400台をノーリトライとすることができない嫌なやつ。

実は.NETのHttpStatusCodeには429の定義がない。

正確には.NETCore2.1にはあって.NET Framework、mono、.NET Standardにはない。

「じゃあ、HttpClientとかでStatusCode受け取れないじゃん」

と思うのだけど、

結果からいうと429扱える。 C#のenumの特性を勘違いしてた。

スクリーンショット 2018-08-27 23.42.15.png

429を返すAPIにアクセスした時のWatch

普段はenumの名前で表示される部分が数字になってる。

じゃあどうやって扱えるかというと

スクリーンショット 2018-08-27 23.43.09.png

これで良い。

C#のenumってこんなこと出来るんですね。試したこともなかったので知らなかったです。

まぁ普通に考えて故意にはやらないのだけど、設計などで応用というか幅を広げられるかも。