我正在尝试使用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