Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 Twitter请求令牌返回401个未经授权的消息。我找不到我做错了什么_C# 4.0_Twitter_Oauth - Fatal编程技术网

C# 4.0 Twitter请求令牌返回401个未经授权的消息。我找不到我做错了什么

C# 4.0 Twitter请求令牌返回401个未经授权的消息。我找不到我做错了什么,c#-4.0,twitter,oauth,C# 4.0,Twitter,Oauth,我需要为移动应用程序进行twitter登录。到目前为止,我已经尝试了很多库,包括tweetsharp和linq2twitter。但我什么也做不到。有了这些麻烦,我求助于网络客户端电话,但我再次陷入困境。当我打电话时,我得到了一个错误。我在这里包括我的代码。你们有什么不对劲吗?我真的被这件事缠住了 string oauth_signature_method = "HMAC-SHA1"; TimeSpan ts = DateTime.UtcNow - new Date

我需要为移动应用程序进行twitter登录。到目前为止,我已经尝试了很多库,包括tweetsharp和linq2twitter。但我什么也做不到。有了这些麻烦,我求助于网络客户端电话,但我再次陷入困境。当我打电话时,我得到了一个错误。我在这里包括我的代码。你们有什么不对劲吗?我真的被这件事缠住了

        string oauth_signature_method = "HMAC-SHA1";
        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
        string oauth_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();

        string oauth_version = "1.0";
        string oauth_consumer_key = "iD1232134AQ2Pb6Q";
        string oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));

        SortedDictionary<string, string> sd = new SortedDictionary<string, string>();

        sd.Add("oauth_version", oauth_version);
        sd.Add("oauth_consumer_key", oauth_consumer_key);
        sd.Add("oauth_nonce", oauth_nonce);
        sd.Add("oauth_signature_method", oauth_signature_method);
        sd.Add("oauth_timestamp", oauth_timestamp);
        UrlEntity callback = new UrlEntity();
        callback.Url = @"//tweeter";
        string encodedCallbackUrl = HttpUtility.UrlEncode(callback.Url);
        sd.Add("oauth_callback",encodedCallbackUrl);

        WebClient wc = new WebClient();
        wc.Headers.Add("User-Agent: randomAgent HTTP Client");
        wc.Headers.Add("Host: api.twitter.com");
        wc.Headers.Add(@"Accept: */*");
        UrlEntity url = new UrlEntity();
        url.Url = @"https://api.twitter.com/oauth/request_token";
        string signature = CreateSignature(url, sd);
        sd.Add("oauth_signature",signature);
        string dataValues = "";
        foreach (KeyValuePair<string, string> pair in sd)
        {
            dataValues += pair.Key + "=''" + pair.Value + "'',";
        }
        dataValues = dataValues.Substring(0, dataValues.Length - 1); // cuts off the last,
        string headerVal = " Oauth " + dataValues;
        wc.Headers.Add("Authorization",headerVal);
        wc.UploadString(@"https://api.twitter.com/oauth/request_token", "");
        wc.DownloadStringCompleted += WcOnDownloadStringCompleted;
string oauth\u签名\u method=“HMAC-SHA1”;
TimeSpan ts=DateTime.UtcNow—新的日期时间(1970,1,1,0,0,0,DateTimeKind.Utc);
字符串oauth_timestamp=Convert.ToInt64(ts.TotalSeconds.ToString();
字符串oauth_version=“1.0”;
字符串oauth_consumer_key=“iD1232134AQ2Pb6Q”;
string oauth_nonce=Convert.ToBase64String(new ascienceoding().GetBytes(DateTime.Now.Ticks.ToString());
SortedDictionary sd=新的SortedDictionary();
添加(“oauth_版本”,oauth_版本);
添加(“oauth_消费者_密钥”,oauth_消费者_密钥);
sd.添加(“oauth_nonce”,oauth_nonce);
添加(“oauth_签名方法”,oauth_签名方法);
添加(“oauth_时间戳”,oauth_时间戳);
UrlEntity回调=新的UrlEntity();
callback.Url=@“//tweeter”;
字符串encodedCallbackUrl=HttpUtility.UrlEncode(callback.Url);
Add(“oauth_回调”,encodedCallbackUrl);
WebClient wc=新的WebClient();
Add(“用户代理:随机代理HTTP客户端”);
Add(“主机:api.twitter.com”);
wc.Headers.Add(@“接受:*/”);
UrlEntity url=新的UrlEntity();
url.url=@“https://api.twitter.com/oauth/request_token";
字符串签名=CreateSignature(url,sd);
sd.添加(“oauth_签名”,签名);
字符串dataValues=“”;
foreach(sd中的KeyValuePair对)
{
dataValues+=pair.Key+''=''''+pair.Value+'';
}
dataValues=dataValues.Substring(0,dataValues.Length-1);//剪掉最后一个,,
字符串headerVal=“Oauth”+数据值;
wc.Headers.添加(“授权”,headerVal);
wc.UploadString(@)https://api.twitter.com/oauth/request_token", "");
wc.DownloadStringCompleted+=WcOnDownloadStringCompleted;
下面是签名的代码

public static string CreateSignature(UrlEntity url, SortedDictionary<string, string> sd)
    {
        string parameterString = "";
        SortedDictionary<string, string> sd2 = new SortedDictionary<string, string>();
        foreach (KeyValuePair<string, string> parameter in sd)
        {
            string encodedKey = HttpUtility.UrlEncode(parameter.Key);
            string encodedvalue = HttpUtility.UrlEncode(parameter.Value);
            sd2.Add(encodedKey,encodedvalue);
        }

        foreach (KeyValuePair<string, string> pair in sd2)
        {
            parameterString += pair.Key + "=" + pair.Value + "&";
        }

        parameterString = parameterString.Substring(0, parameterString.Length - 1); // cuts off the last &


        string signatureString = "POST&";
        var encodedUrl = HttpUtility.UrlEncode(url.Url); // percent encode URL 
        signatureString += encodedUrl + "&";
        signatureString += HttpUtility.UrlEncode(parameterString); // percent encode entire parameter string

        string consumerSecret = "supercorectConsumersecretfromtwitterwebsite";
        string signingKey = HttpUtility.UrlEncode(consumerSecret) + "&";
        HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey));

        string signatureStringFinal = Convert.ToBase64String(hasher.ComputeHash(new ASCIIEncoding().GetBytes(signatureString)));


        return signatureStringFinal;
    }
公共静态字符串CreateSignature(UrlEntity url,SortedDictionary sd)
{
字符串参数string=“”;
SortedDictionary sd2=新的SortedDictionary();
foreach(sd中的KeyValuePair参数)
{
字符串encodedKey=HttpUtility.UrlEncode(parameter.Key);
字符串encodedvalue=HttpUtility.UrlEncode(parameter.Value);
添加(encodedKey,encodedvalue);
}
foreach(sd2中的KeyValuePair对)
{
parameterString+=pair.Key+“=”+pair.Value+“&”;
}
parameterString=parameterString.Substring(0,parameterString.Length-1);//切掉最后一个&
字符串signatureString=“POST&”;
var encodedUrl=HttpUtility.UrlEncode(url.url);//百分比编码url
signatureString+=encodedUrl+“&”;
signatureString+=HttpUtility.UrlEncode(parameterString);//对整个参数字符串进行百分比编码
字符串consumerSecret=“supercrectconsumersecretfromtwitterwebsite”;
string signingKey=HttpUtility.UrlEncode(ConsumerCret)+“&”;
HMACSHA1 hasher=new-HMACSHA1(new-ascienceoding().GetBytes(signingKey));
string signatureStringFinal=Convert.ToBase64String(hasher.ComputeHash(new-ascienceoding().GetBytes(signatureString));
返回signatureStringFinal;
}
有点乱,但我被卡住了。以下链接可能会有所帮助。

编辑:

我已经用fiddler查看了请求。 响应消息中包含以下内容

“验证oauth签名和令牌失败”


这可能意味着oauth签名是错误的。但是我已经看过了,什么也没看到。

我不是.net专家,但我正在为PHP设置类似的东西,注意Oauth属性必须按字母顺序排列。通过快速查看,这里的示例似乎并不正确。请参阅。

我建议查看Asp.Net标识。还是上面的标签