我正在嘗試使用RestSharp從我的網絡應用發佈Twitter狀態。下面的代碼工作完美:RestSharp和Twitter API 1.1:我如何正確URLEncode狀態更新文本?
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);
但是,此代碼失敗,身份驗證錯誤,如果我有任何的狀態文本如下字符:! * ' ()
通過論壇拖網的很多,我已經推斷出這與OAuth簽名編碼不匹配POST參數的編碼有關。我發現this question on SO,但在GitHub上搜索RestSharp問題沒有任何幫助。
我可以看到some code in the RestSharp source(UrlEncodeRelaxed
)這似乎是手動編碼的特定字符集合符合OAuth編碼規範,所以我試圖以相同的方式手動編碼這些字符在我的狀態(帶代碼來自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錯誤?
您是否找到解決方案或解決?我正試圖解決這個問題。 – 2015-01-04 07:22:58
@Michael_B不,對不起:我開始研究它,但在其他優先事項阻礙之前並沒有達到很遠。 – 2015-01-04 08:38:06
我最終使用Linq2Twitter進行狀態更新。它適用於Twitter API的v1.1。我從來沒有找到解決RestSharp的OAuth問題的方法。 – 2015-01-08 22:29:48