C# Twitter获取请求\u令牌问题,出现异步-401错误

C# Twitter获取请求\u令牌问题,出现异步-401错误,c#,twitter,asynchronous,C#,Twitter,Asynchronous,我在从Twitter异步获取请求令牌时遇到问题-服务器返回“远程服务器返回错误:(401)未经授权。” 这是我正在使用的代码- public void AcquireRequestToken(Action<bool> response) { string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); // buil

我在从Twitter异步获取请求令牌时遇到问题-服务器返回“远程服务器返回错误:(401)未经授权。”

这是我正在使用的代码-

public void AcquireRequestToken(Action<bool> response)
{

    string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));

    // build the signature
    var headers = new Dictionary<string,string>()
    {
        { "oauth_consumer_key", _oAuthConfig.ConsumerKey },
        { "oauth_nonce", oauth_nonce },
        { "oauth_signature_method", "HMAC-SHA1" },
        { "oauth_timestamp", MakeTimestamp() },
        { "oauth_version", "1.0" },
        { "oauth_callback", PercentEncode(_oAuthConfig.Callback) },
    };

    string signature = MakeSignature ("POST", _oAuthConfig.RequestTokenUrl, headers);
    string compositeSigningKey = MakeSigningKey(_oAuthConfig.ConsumerSecret, null);
    string oauth_signature = MakeOAuthSignature(compositeSigningKey, signature);

    Uri fullUri = new Uri(_oAuthConfig.RequestTokenUrl);

    var request = (HttpWebRequest)WebRequest.Create(fullUri);
    request.Method = "POST";

    request.Headers.Add("oauth_consumer_key", PercentEncode(_oAuthConfig.ConsumerKey));
    request.Headers.Add("oauth_nonce", PercentEncode(oauth_nonce));
    request.Headers.Add("oauth_signature_method", PercentEncode("HMAC-SHA1"));
    request.Headers.Add("oauth_timestamp", PercentEncode(MakeTimestamp()));
    request.Headers.Add("oauth_version", "1.0");
    request.Headers.Add("oauth_callback", PercentEncode(_oAuthConfig.Callback));
    request.Headers.Add("oauth_signature", PercentEncode(oauth_signature));

    try 
    {

        request.BeginGetResponse(new AsyncCallback(result =>
        {
            string contents = String.Empty;
            HttpWebRequest theRequest = (HttpWebRequest)result.AsyncState;

            if (theRequest != null)
            {
                try
                {
                    HttpWebResponse theResponse = (HttpWebResponse)theRequest.EndGetResponse(result);

                    using (Stream stream = theResponse.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        contents = reader.ReadToEnd();
                    }

                    Dictionary<string, object> results = JsonConvert.DeserializeObject<Dictionary<string, object>>(contents);

                    _requestToken = (string)results ["oauth_token"];
                    _requestTokenSecret = (string)results ["oauth_token_secret"];

                    response(true);
                }
                catch (WebException e)
                {
                    response(false);
                }
            }
            else
            {
                response(false);
            }
        }), request);

    }
    catch (WebException e)
    {
        response(false);
    }

}
公共请求令牌(操作响应)
{
string oauth_nonce=Convert.ToBase64String(new ascienceoding().GetBytes(DateTime.Now.Ticks.ToString());
//构建签名
var headers=newdictionary()
{
{“oauth_consumer_key”,_oAuthConfig.ConsumerKey},
{“oauth_nonce”,oauth_nonce},
{“oauth_签名法”,“HMAC-SHA1”},
{“oauth_timestamp”,MakeTimestamp()},
{“oauth_版本”,“1.0”},
{“oauth_callback”,PercentEncode(_oAuthConfig.callback)},
};
string signature=MakeSignature(“POST”,_oAuthConfig.RequestTokenUrl,headers);
string compositeSigningKey=MakeSigningKey(_oAuthConfig.ConsumerCret,null);
字符串oauth_签名=MakeOAuthSignature(compositeSigningKey,签名);
urifulluri=新的Uri(_oAuthConfig.RequestTokenUrl);
var request=(HttpWebRequest)WebRequest.Create(fullUri);
request.Method=“POST”;
Add(“oauth_consumer_key”,PercentEncode(_oAuthConfig.ConsumerKey));
Add(“oauth_nonce”,PercentEncode(oauth_nonce));
添加(“oauth_签名_方法”,PercentEncode(“HMAC-SHA1”);
Add(“oauth_timestamp”,PercentEncode(MakeTimestamp());
添加(“oauth_版本”、“1.0”);
Add(“oauth_callback”,PercentEncode(_oAuthConfig.callback));
Add(“oauth_签名”,PercentEncode(oauth_签名));
尝试
{
request.BeginGetResponse(新的AsyncCallback(结果=>
{
string contents=string.Empty;
HttpWebRequest theRequest=(HttpWebRequest)result.AsyncState;
如果(请求!=null)
{
尝试
{
HttpWebResponse theResponse=(HttpWebResponse)theRequest.EndGetResponse(结果);
使用(Stream=theResponse.GetResponseStream())
使用(StreamReader=新StreamReader(stream))
{
contents=reader.ReadToEnd();
}
Dictionary results=JsonConvert.DeserializeObject(内容);
_requestToken=(字符串)结果[“oauth_令牌”];
_requestTokenSecret=(字符串)结果[“oauth_token_secret”];
回答(正确);
}
捕获(WebE例外)
{
回答(假);
}
}
其他的
{
回答(假);
}
}),请求);
}
捕获(WebE例外)
{
回答(假);
}
}
我的旧(非异步)代码运行良好-

public bool AcquireRequestToken()
{
    var headers = new Dictionary<string,string>()
    {
        { "oauth_callback", PercentEncode(_oAuthConfig.Callback) },
        { "oauth_consumer_key", _oAuthConfig.ConsumerKey },
        { "oauth_signature_method", "HMAC-SHA1" },
        { "oauth_timestamp", MakeTimestamp() },
        { "oauth_version", "1.0" }
    };

    string signature = MakeSignature ("POST", _oAuthConfig.RequestTokenUrl, headers);
    string compositeSigningKey = MakeSigningKey(_oAuthConfig.ConsumerSecret, null);
    string oauth_signature = MakeOAuthSignature(compositeSigningKey, signature);

    var wc = new WebClient ();
    headers.Add ("oauth_signature", PercentEncode(oauth_signature));
    wc.Headers [HttpRequestHeader.Authorization] = HeadersToOAuth(headers);

    try
    {
        var result = HttpUtility.ParseQueryString(wc.UploadString (new Uri(_oAuthConfig.RequestTokenUrl), ""));

        if (result ["oauth_callback_confirmed"] != null)
        {
            _requestToken = result ["oauth_token"];
            _requestTokenSecret = result ["oauth_token_secret"];

            return true;
        }
    }
    catch (Exception e)
    {
        return false;
    }

}
public bool收单机构equestToken()
{
var headers=newdictionary()
{
{“oauth_callback”,PercentEncode(_oAuthConfig.callback)},
{“oauth_consumer_key”,_oAuthConfig.ConsumerKey},
{“oauth_签名法”,“HMAC-SHA1”},
{“oauth_timestamp”,MakeTimestamp()},
{“oauth_版本”,“1.0”}
};
string signature=MakeSignature(“POST”,_oAuthConfig.RequestTokenUrl,headers);
string compositeSigningKey=MakeSigningKey(_oAuthConfig.ConsumerCret,null);
字符串oauth_签名=MakeOAuthSignature(compositeSigningKey,签名);
var wc=新的WebClient();
添加(“oauth_签名”,百分比编码(oauth_签名));
wc.Headers[HttpRequestHeader.Authorization]=headerstoauth(Headers);
尝试
{
var result=HttpUtility.ParseQueryString(wc.UploadString(新Uri(_oAuthConfig.RequestTokenUrl),“”);
if(结果[“oauth\u回调\u确认”]!=null)
{
_requestToken=result[“oauth_token”];
_requestTokenSecret=result[“oauth_-token_-secret”];
返回true;
}
}
捕获(例外e)
{
返回false;
}
}
新版本中的标题略有不同,但保持它们不变没有帮助


谢谢你的建议

标题有误。只有一个HTTP头名为
授权

Authorization: OAuth oauth_consumer_key="<the consumer key of your app>", oauth_nonce="<the nonce>", oauth_signature="<the signature>", oauth_signature_method="HMAC-SHA1", oauth_timestamp="<the timestamp>", oauth_token="<your token>", oauth_version="1.0"
Authorization:OAuth-OAuth\u consumer\u key=“”,OAuth\u nonce=“”,OAuth\u signature=“”,OAuth\u signature\u method=“HMAC-SHA1”,OAuth\u timestamp=“”,OAuth\u token=“”,OAuth\u version=“1.0”
此页面将告诉您如何制作:。除两种方法外,所有方法均相同:

  • request_token
    需要
    oauth_回调
    ,但不需要
    oauth_token
    (因为您没有它,所以这很正常)
  • access\u-token
    需要
    oauth\u-verifier
    (您将在第二步后获得它)