C# twitterapi&;DotNetOpenAuth&;HttpClient:错误“;“无法验证您的身份”;
我试图发布一个Twitter状态更新,但我就是无法让它工作C# twitterapi&;DotNetOpenAuth&;HttpClient:错误“;“无法验证您的身份”;,c#,twitter,dotnetopenauth,dotnet-httpclient,C#,Twitter,Dotnetopenauth,Dotnet Httpclient,我试图发布一个Twitter状态更新,但我就是无法让它工作 var consumer = new TwitterConsumer(); // WebConsumer implementation var httpClient = new HttpClient(consumer.CreateAuthorizingHandler("THE_TOKEN", new HttpClientHandler())); var content = new FormUrlEncodedContent(new D
var consumer = new TwitterConsumer(); // WebConsumer implementation
var httpClient = new HttpClient(consumer.CreateAuthorizingHandler("THE_TOKEN", new HttpClientHandler()));
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"status", "test"}
});
// yes, yes, ugly code, only testing here
var s = httpClient.PostAsync("https://api.twitter.com/1.1/statuses/update.json", content);
var t = s.Result;
var u = t.Content.ReadAsStringAsync().Result; // HTTP 401, response from Twitter is {"errors":[{"message":"Could not authenticate you","code":32}]}
var consumer=new twitter consumer();//WebConsumer实现
var httpClient=new-httpClient(consumer.createAuthorizationHandler(“_令牌”,new-HttpClientHandler());
var content=newformurlencodedcontent(新字典
{
{“状态”,“测试”}
});
//是的,是的,丑陋的代码,只在这里测试
var s=httpClient.PostAsync(“https://api.twitter.com/1.1/statuses/update.json“,内容);
var t=s.结果;
var u=t.Content.ReadAsStringAsync().Result;//HTTP 401,来自Twitter的响应为{“错误”:[{“消息”:“无法验证您的身份”,“代码”:32}]}
当然,最初我认为我的auth令牌或OAuth进程存在一些问题,但所有其他事情都正常工作:
OAuth身份验证似乎有效,因为我可以访问其他API方法,如https://api.twitter.com/1.1/account/settings.json
我甚至可以在通过URI提交状态时发布状态更新,如发布https://api.twitter.com/1.1/statuses/update.json?status=test
。我只有在尝试将状态
放入请求正文时才会出现错误
根据谷歌的说法,很多人都有类似的问题,不幸的是,建议的解决方案(比如双重检查url编码或内容-请求头)对我不起作用(请求在Fiddler中看起来应该是这样的)。严格来说,这可能会解决你的问题
我建议你去看看。这是一个非常好的Twitter C#api
您可以查看(这是开源的)他们是如何实现签名请求的,以发现代码中的问题,也可以实际使用它,而不干扰创建/签名请求和解析响应(在我过去的一个项目中使用了它,效果很好,提供了方便的api)
请参阅发布状态更新示例,并务必阅读以了解如何在场景中正确配置auth(TwitterContext
)
希望这会有所帮助。只接受POST方法,因此我不确定您是否可以通过GET方法提交状态更新。将account/settings.json API方法中的HTTP“Authorization”请求头与statuses/update.json中的“Authorization”HTTP请求头进行比较,并检查“oauth\u consumer\u key”、“oauth\u signature\u method”、“oauth\u nonce”,“oauth_令牌”,“oauth_签名”,也检查内容类型头,这可能会帮助您找到问题。vzamanillo,GET方法肯定有效。我认为我的问题不在于OAuth身份验证,因为我在API上尝试的所有其他方法都可以正常工作。只是不是发布新状态。如果您尝试使用GET,您将收到一个错误。您使用的api版本是什么?对不起,我错了:(我仔细检查了,确实使用了POST请求,但将status
参数添加到URL而不是正文。因此,我使用了POST请求,但使用了GET参数-我将相应地更新我的问题。对于混淆,我深表歉意。