Twitter API& DotNetOpenAuth& HttpClient:错误“无法验证您”

时间:2013-12-02 09:23:43

标签: 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 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}]}

当然,最初我认为我的身份验证令牌或OAuth流程存在一些问题,但所有其他事情都运转良好:

OAuth身份验证似乎有效,因为我可以访问其他API方法,例如https://api.twitter.com/1.1/account/settings.json

我甚至可以在通过URI 提交status时发布状态更新,例如POST https://api.twitter.com/1.1/statuses/update.json?status=test。当我尝试将status放入请求主体时,我只收到错误。

根据Google的说法,很多人都有类似的问题,不幸的是,建议的解决方案(比如仔细检查url-encoding或content - Request-Header)对我来说不起作用(请求看起来像应该在Fiddler)。

1 个答案:

答案 0 :(得分:2)

虽然严格来说并不是对问题的回答,但这可以解决您的问题。

我建议你看看linq2twitter。这对Twitter来说是一个非常好的C#api。

你可以偷看(它的开源)他们如何实现签名请求以查找代码问题或实际使用它而不是混乱创建/签署请求和解析响应(在我过去的一个项目中使用它) ,工作正常,提供方便的api)。

有关发布状态更新的示例,请参阅here,请务必阅读this docs section以了解如何在您的方案中正确配置身份验证(TwitterContext)。

希望这会有所帮助。

相关问题