Exemple #1
0
            public WebRequest MakeRequest(string method, string url, object data = null)
            {
                method = method.ToUpper();
                var uri = new Uri(url);
                var dic = new SortedDictionary <string, object>();

                if (!string.IsNullOrWhiteSpace(uri.Query))
                {
                    OAuth.AddDictionary(dic, uri.Query);
                }

                if (data != null)
                {
                    OAuth.AddDictionary(dic, data);
                }

                if (!string.IsNullOrWhiteSpace(this.User.Token))
                {
                    dic.Add("oauth_token", UrlEncode(this.User.Token));
                }

                dic.Add("oauth_consumer_key", UrlEncode(this.App.Token));
                dic.Add("oauth_nonce", OAuth.GetNonce());
                dic.Add("oauth_timestamp", OAuth.GetTimeStamp());
                dic.Add("oauth_signature_method", "HMAC-SHA1");
                dic.Add("oauth_version", "1.0");

                var hashKey = string.Format(
                    "{0}&{1}",
                    UrlEncode(this.App.Secret),
                    this.User.Secret == null ? null : UrlEncode(this.User.Secret));
                var hashData = string.Format(
                    "{0}&{1}&{2}",
                    method.ToUpper(),
                    UrlEncode(string.Format("{0}{1}{2}{3}", uri.Scheme, Uri.SchemeDelimiter, uri.Host, uri.AbsolutePath)),
                    UrlEncode(OAuth.ToString(dic)));

                using (var hash = new HMACSHA1(Encoding.UTF8.GetBytes(hashKey)))
                    dic.Add("oauth_signature", UrlEncode(Convert.ToBase64String(hash.ComputeHash(Encoding.UTF8.GetBytes(hashData)))));

                var sbData = new StringBuilder();

                sbData.Append("OAuth ");
                foreach (var st in dic)
                {
                    if (Array.IndexOf <string>(oauth_array, st.Key) >= 0)
                    {
                        sbData.AppendFormat("{0}=\"{1}\",", st.Key, Convert.ToString(st.Value));
                    }
                }
                sbData.Remove(sbData.Length - 1, 1);

                var str = sbData.ToString();

                var req = (HttpWebRequest)WebRequest.Create(uri);

                req.Method = method;
                req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                req.UserAgent = "twitas/1.0 (.NET 4.5)";
                req.Headers.Add("Authorization", sbData.ToString());

                if (method == "POST")
                {
                    req.ContentType = "application/x-www-form-urlencoded";
                }

                return(req);
            }