我正在尝试使用RestSharp检索Twitter OAuth请求令牌,但无论我尝试什么,API似乎都以404响应。这是我的方法代码:
public void GetRequestToken()
{
var client = new RestClient("https://api.twitter.com/1");
var authenticator = OAuth1Authenticator.ForRequestToken(_consumerKey, _consumerSecret);
authenticator.ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader;
client.Authenticator = authenticator;
var request = new RestRequest("/oauth/request_token", Method.POST);
request.AddHeader("oauth_callback", "http%3A%2F%2Fmarkashleybell.com");
var response = client.Execute(request);
var qs = HttpUtility.ParseQueryString(response.Content);
_token = qs["oauth_token"];
_tokenSecret = qs["oauth_token_secret"];
}
从_consumerKey
设置中检索了 _consumerSecret
和Web.config
,并且我已经仔细检查过它们是否正确。 _token
和_tokenSecret
是包含此方法的类的私有成员变量。
请求的API网址是否正确。请求似乎是根据Twitter's documentation传递所有正确的标头。
我尝试使用APIGee console进行相同的API调用,看看我做错了什么,但即使 也会返回404.
我在这里做错了什么?
答案 0 :(得分:4)
DOH 。事实证明,OAuth操作的Twitter API URL实际上与所有其他Twitter API调用略有不同,并且省略了API版本段,因此这是真正的404.
还提供了一种更整洁的方法来提供RestSharp验证器构造函数中内置的oauth_callback
参数 - 供参考,以下代码完美运行:
public void GetRequestToken()
{
var client = new RestClient("https://api.twitter.com"); // Note NO /1
client.Authenticator = OAuth1Authenticator.ForRequestToken(
_consumerKey,
_consumerSecret,
"http://markashleybell.com" // Value for the oauth_callback parameter
);
var request = new RestRequest("/oauth/request_token", Method.POST);
var response = client.Execute(request);
var qs = HttpUtility.ParseQueryString(response.Content);
_token = qs["oauth_token"];
_tokenSecret = qs["oauth_token_secret"];
}