C#でTwitterAPI 叩こうとしてOAuthのURLエンコードではまった

C#(≒ .NET Framework)でTwitterAPI叩こうとしてOAuthが401エラー返してくれて困ってたのでメモっておく。


こちらにあるTwitterのOAuthを叩くコードを使おうとしたところまではよしとして、URLエンコードを自前でやっていたので何も考えずに Framework の System.Web.HttpUtility.UrlEncode に置き換えたのが悪かった。
リクエストークン取りに行くところでTwitterが401を返すようになってしまってさーたいへん(棒)。


ソースの UrlEncode と System.Web.HttpUtility.UrlEncode の違いはエンコード出力の%エスケープされた16進表記が大文字か小文字(HttpUtility.UrlEncode)の差。これが問題になること無いだろと思ったけれど、よくよく調べていくと

で、OAuthの仕様でURLエンコード後の大文字小文字表記が決まってるとorz (google:「oauth urlエンコード」)

OAuth の oauth_signature を作るときは大文字16進表記でないとダメらしい。それで自前実装だったのね、、と。


OAuth の 仕様 の 5.1 パラメータエンコーディング にも明記してあったり。

またエンコードされた16進数の文字は、必ず大文字にしておく必要があります。