RestSharpを使用して、私のWebアプリケーションからTwitterステータスを投稿しようとしています。次のコードは完璧に動作します:RestSharpとTwitter API 1.1:ステータス更新テキストを正しく入力するにはどうすればよいですか?
var status = "I am fine with posting this status.";
var client = new RestClient("https://api.twitter.com");
// The OAuth keys/tokens/secrets are retrieved elsewhere
client.Authenticator = OAuth1Authenticator.ForProtectedResource(
_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret
);
var request = new RestRequest("/1.1/statuses/update.json", Method.POST);
request.AddParameter("status", status, ParameterType.GetOrPost);
var response = client.Execute(request);
をしかし、私はステータステキストで次の文字のいずれかの含まれている場合、このコードは認証エラーで失敗:フォーラムトロールの多くを通じて! * ' ()
を、Iこれは、POSTパラメータのエンコーディングと一致しないOAuthシグネチャのエンコーディングと関係があると推測しました。 this question on SOが見つかりましたが、GitHubのRestSharpの問題を検索すると何も役立ちません。
OAuthエンコーディング仕様に準拠するために、その特定の文字セットを手動でエンコードしていると思われるsome code in the RestSharp source(UrlEncodeRelaxed
)がありますので、同じ方法で自分のステータスでこれらの文字を手動でエンコードしようとしましたRestSharpから):
var status = "I'm NOT fine with posting this status.";
string[] UriRfc3986CharsToEscape = new[] { "!", "*", "'", "(", ")" };
string[] UriRfc3968EscapedHex = new[] { "%21", "%2A", "%27", "%28", "%29" };
for (var i = 0; i < UriRfc3986CharsToEscape.Length; i++)
status = status.Replace(UriRfc3986CharsToEscape[i], UriRfc3968EscapedHex[i]);
しかし、これは動作しません(まだ認証エラーが発生します)。
ここでは実際にどのような問題がありますか、ステータスを正しくエンコードするにはどうすればよいですか?それともRestSharpのバグですか?
解決方法は見つかりましたか?私は今これに取り組もうとしています。 –
@Michael_Bいいえ、申し訳ありません:私はそれを調べ始めましたが、他の優先事項が途中で得られるまでにはあまり遠くまでは行きませんでした。 –
ステータス更新のためにLinq2Twitterを使用しました。これはTwitter APIのv1.1で動作します。私はRestSharpのOAuthの問題の周りに方法を見つけたことはありません。 –