【问题标题】:Twitter Status update Windows 8 app keep getting unauthorised errorTwitter 状态更新 Windows 8 应用程序不断收到未经授权的错误
【发布时间】:2013-07-21 20:07:53
【问题描述】:

我正在开发 windows 8 应用程序,以下是我使用 c# 和 windows 8 发布到 twitter 的代码

        const string oauthVersion = "1.0";
        const string oauthSignatureMethod = "HMAC-SHA1";

        var oauthNonce = new Random().Next(123400, 9999999);
        TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        var oauth_timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();
        var baseString = string.Format(baseFormat,
                                    consumerKey,
                                    oauthNonce,
                                    oauthSignatureMethod,
                                    oauth_timestamp,
                                    oauth_token,
                                    oauthVersion,
                                    Uri.EscapeDataString(status)
                                    );

        baseString = string.Concat("POST&", Uri.EscapeDataString(resourceUrl),
                     "&", Uri.EscapeDataString(baseString));

        IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(ConsumerSecret + "&" + oauth_token_secret, BinaryStringEncoding.Utf8);

        MacAlgorithmProvider hmacSha1Provider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
        CryptographicKey macKey = hmacSha1Provider.CreateKey(keyMaterial);
        IBuffer dataToBeSigned = CryptographicBuffer.ConvertStringToBinary(baseString, BinaryStringEncoding.Utf8);
        IBuffer signatureBuffer = CryptographicEngine.Sign(macKey, dataToBeSigned);
        String signature = CryptographicBuffer.EncodeToBase64String(signatureBuffer);

        const string headerFormat = "OAuth oauth_consumer_key=\"{0}\", oauth_nonce=\"{1}\", " +
                                    "oauth_signature=\"{2}\", oauth_signature_method=\"{3}\", " +
                                    "oauth_timestamp=\"{4}\", oauth_token=\"{5}\", " +
                                    "oauth_version=\"{6}\"";

        var authHeader = string.Format(headerFormat,
                                Uri.EscapeDataString(consumerKey),
                                Uri.EscapeDataString(oauthNonce.ToString()),
                                Uri.EscapeDataString(signature),
                                Uri.EscapeDataString(oauthSignatureMethod),
                                Uri.EscapeDataString(oauth_timestamp),
                                Uri.EscapeDataString(oauth_token),
                                Uri.EscapeDataString(oauthVersion)
                        );

        var postBody = "status=" + Uri.EscapeDataString(status);

        var httpClient = new HttpClient();
        //httpClient.BaseAddress = new Uri(resourceUrl);
        httpClient.DefaultRequestHeaders.ExpectContinue = false;
        httpClient.DefaultRequestHeaders.Add("Authorization", authHeader);

        byte[] content = System.Text.Encoding.Unicode.GetBytes(postBody);

        var byteArrayContent = new ByteArrayContent(content);
        byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
        var response = httpClient.PostAsync(resourceUrl, byteArrayContent);
        var httpResponseMessage = response.Result;
        var isSuccessStatusCode = httpResponseMessage.IsSuccessStatusCode;

它不断给出未经授权的错误, 请帮忙

【问题讨论】:

    标签: c# twitter windows-8


    【解决方案1】:

    使用现有的开源 Twitter 库检查您的代码

    Twitterizer

    TwitterRT

    Linq2Twitter

    TweetSharp

    【讨论】:

    • 我尝试了 twitterRt,它假设可以与 windowsRT 一起使用,但它仍然给出未经授权的错误。其他库无法工作,因为适用于 windows rt 应用程序的 .net 版本框架没有很多库,其中一些用于身份验证
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2020-02-26
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多