Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 查找请求时传入回调url_C#_Api_Twitter - Fatal编程技术网

C# 查找请求时传入回调url

C# 查找请求时传入回调url,c#,api,twitter,C#,Api,Twitter,我正在将twitter集成添加到我的公司web应用程序中,但遇到了一个障碍 当前的问题是回调url 在twitter中,它似乎希望有一个设置值,但在我们的应用程序设置方式中,访问该站点的每个客户都有自己的url 理想情况下,我希望动态设置回调url,但我很难找到任何关于这方面的信息 编辑: 我想我可能需要在这里添加更多细节,以便更好地帮助您帮助我 问题是我将回调url参数设置为,但当我转到获取权限时,它将转到api上的回调设置,而不是我在上一个请求中设置的 下面是我的代码的样子: pub

我正在将twitter集成添加到我的公司web应用程序中,但遇到了一个障碍

当前的问题是回调url

在twitter中,它似乎希望有一个设置值,但在我们的应用程序设置方式中,访问该站点的每个客户都有自己的url

理想情况下,我希望动态设置回调url,但我很难找到任何关于这方面的信息

编辑: 我想我可能需要在这里添加更多细节,以便更好地帮助您帮助我

问题是我将回调url参数设置为,但当我转到获取权限时,它将转到api上的回调设置,而不是我在上一个请求中设置的

下面是我的代码的样子:

    public string oAuthToken(string callbackUrl)
    {
        Uri oauthUrl = new Uri("https://api.twitter.com/oauth/request_token");
        var oauthNonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        var oauthTimestamp = this.GenerateTimeStamp();
        var oauthSignature = "";

        var authSignature = string.Format("oauth_callback=\"{0}\"&oauth_consumer_key=\"{1}\"&oauth_nonce=\"{2}\"&oauth_signature_method=\"{3}\"&oauth_timestamp=\"{4}\"&oauth_version=\"{5}\"",
            Uri.EscapeDataString(callbackUrl),
            Uri.EscapeDataString(this.ConsumerKey),
            Uri.EscapeDataString(oauthNonce),
            Uri.EscapeDataString(oauthSignatureMethod),
            Uri.EscapeDataString(oauthTimestamp),
            Uri.EscapeDataString(oauthVersion));

        var baseString = string.Format("POST&{0}&{1}", Uri.EscapeDataString(oauthUrl.AbsoluteUri), Uri.EscapeDataString(authSignature));
        var compositeKey = string.Concat(Uri.EscapeDataString(this.ConsumerSecret), "&");

        using (HMACSHA1 hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey)))
        {
            oauthSignature = Convert.ToBase64String(hasher.ComputeHash(Encoding.ASCII.GetBytes(baseString)));
        }

        var authHeader = string.Format("oauth oauth_callback=\"{0}\", oauth_consumer_key=\"{1}\", oauth_nonce=\"{2}\", oauth_signature=\"{3}\", oauth_signature_method=\"{4}\", oauth_timestamp=\"{5}\", oauth_version=\"{6}\"",
            Uri.EscapeDataString(callbackUrl),
            Uri.EscapeDataString(this.ConsumerKey),
            Uri.EscapeDataString(oauthNonce),
            Uri.EscapeDataString(oauthSignature),
            Uri.EscapeDataString(oauthSignatureMethod),
            Uri.EscapeDataString(oauthTimestamp),
            Uri.EscapeDataString(oauthVersion));

        ServicePointManager.Expect100Continue = false;
        HttpWebRequest authRequest = (HttpWebRequest)System.Net.WebRequest.Create(oauthUrl);

        authRequest.Method = "POST";
        authRequest.Headers.Add("Authorization", authHeader);
        authRequest.Headers.Add("Accept-Encoding", "gzip");
        authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
        authRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

        try
        {
            using (var response = authRequest.GetResponse() as HttpWebResponse)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription));
                }

                var stream = response.GetResponseStream();
                var sr = new StreamReader(stream);
                return sr.ReadToEnd();
            }
        }
        catch (WebException ex)
        {
            using (var stream = ex.Response.GetResponseStream())
            using (var reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
    }

我总是返回401错误。

当在应用程序设置中需要回调URL时,OAuth 1.0A规范要求将回调URL与请求令牌一起传递。您可以通过该请求将任何有效的URL传递给,从而有效地使每个回调都指向每个用户的唯一URL。因此,在应用程序的设置中,您没有被锁定在回调URL中。

啊,好吧,一直在暗示我的是如何设置其他回调URL。似乎每次我使用oauth_回调时,它仍然使用api的默认回调设置。您需要将带有百分比编码回调url的
callback_url
参数传递给。你可以在一个演示应用程序中看到这一点,尽管它是用Python编写的。一个代码示例会很有帮助,否则我看不出我们可以如何帮助你。我将不得不尝试放弃一些东西,它们都是分散的。我已经决定现在使用TweetSharp,尽管我想找到一个更好的解决方案,因为这个库不再维护。