C# 使用twitterapi对请求进行签名

C# 使用twitterapi对请求进行签名,c#,oauth,twitter,C#,Oauth,Twitter,这里有一个让我发疯的问题:下面的代码对第一个URL(查找)非常有效,但对第二个URL(更新状态)却不起作用。我的请求出现错误的签名错误 url = string.Format("http://api.twitter.com/1/users/lookup.xml?screen_name={0}", myOAuth.UrlEncode("someuser")); url = string.Format("http://api.twitter.com/1/statuses/update.xml?sta

这里有一个让我发疯的问题:下面的代码对第一个URL(查找)非常有效,但对第二个URL(更新状态)却不起作用。我的请求出现错误的签名错误

url = string.Format("http://api.twitter.com/1/users/lookup.xml?screen_name={0}", myOAuth.UrlEncode("someuser"));
url = string.Format("http://api.twitter.com/1/statuses/update.xml?status={0}", myOAuth.UrlEncode("bla bla bla"));

string oAuthSignature = myOAuth.GenerateSignature(new Uri(url), consumerKey, consumerSecret, token, tokenSecret, httpMethod, timeStamp, nonce, signatureType, out normalizedUrl, out normalizedRequestParameters);
string encodedSign = myOAuth.UrlEncode(oAuthSignature);

// Rebuild query url with authorization
this.richTextBox1.Text = string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedRequestParameters, encodedSign);
可能是因为第一个url是GET方法,第二个url是POST方法吗?
我被困在这里,所以我有什么想法,谢谢你的帮助;)

这只是一个小小的猜测

可能的问题1

更新api只有在实际作为POST请求发送(而不仅仅是作为POST请求签名)时才能工作。当twitter重新创建您的签名以验证您发送的签名时,它会检查发送请求的http方法,并使用该信息创建签名基字符串。因此,如果您在签名基字符串中创建了一个带有“POST”的签名,但实际上将其作为GET。。。这行不通

可能的问题2

如果您正在发送POST请求,那么另一个可能的问题是您没有将POST用作签名基字符串的一部分。在第二种情况下,调用
myauth.GenerateSignature
时,作为
httpMethod
参数发送什么?因为http方法(GET或POST)是签名基字符串的一部分。这需要相应地设置

可能的问题3


您是否在每个请求中都发送新的nonce?

如果您不发布
GenerateSignature
方法的代码,您将得到的只是猜测。谢谢您的帮助。然而,我的问题根本不在签名请求过程中,http方法和生成的签名是正确的。实际上,在发送请求之前,我必须在请求中使用http方法:HttpWebRequest=(HttpWebRequest)WebRequest.Create(url);request.Method=Method.ToString();所以事实上,这是我上面概述的问题之一。你没有把它作为邮寄申请寄出去?该死!我怎么了??是的,你一开始就给我指出了正确的方向,我一定是瞎了/傻了/累了,没有看到它,或者误解了它。。。我对这个API做了太多的工作,我想。。。谢谢;)