2

我正在尝试使用 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_consumerSecretWeb.config设置中检索,我已经仔细检查它们是否正确。_token并且_tokenSecret是包含此方法的类的私有成员变量。

请求的 API url 是正确的。根据Twitter 的文档,该请求似乎传递了所有正确的标头。

我尝试使用APIGee 控制台进行相同的 API 调用,看看我做错了什么,但即使这样也返回 404。

我在这里做错了什么?

4

1 回答 1

4

卫生部。事实证明,用于 OAuth 操作的 Twitter API URL 实际上与所有其他 Twitter API 调用的 URL 略有不同,并且省略了 API 版本段,因此这是一个真正的 404。

还有一种更简洁的方法来提供oauth_callback内置于 RestSharp 身份验证器构造函数中的参数——作为参考,下面的代码完美运行:

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"];
}
于 2012-08-28T06:26:56.937 回答