Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# twitterapi&;DotNetOpenAuth&;HttpClient:错误“;“无法验证您的身份”;_C#_Twitter_Dotnetopenauth_Dotnet Httpclient - Fatal编程技术网

C# twitterapi&;DotNetOpenAuth&;HttpClient:错误“;“无法验证您的身份”;

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

我试图发布一个Twitter状态更新,但我就是无法让它工作

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参数-我将相应地更新我的问题。对于混淆,我深表歉意。