C# 在C中使用Oauth1从RESTAPI获取请求令牌#

C# 在C中使用Oauth1从RESTAPI获取请求令牌#,c#,rest,oauth-1.0a,C#,Rest,Oauth 1.0a,正如标题所述,我只需要OAuth1.0身份验证的第一部分的帮助:获取请求令牌。我正在使用C#在控制台应用程序中执行此操作。我已经在这方面工作了3天了,我从互联网上尝试了许多样品,但到目前为止没有任何效果。以下是我目前的尝试: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Http

正如标题所述,我只需要OAuth1.0身份验证的第一部分的帮助:获取请求令牌。我正在使用C#在控制台应用程序中执行此操作。我已经在这方面工作了3天了,我从互联网上尝试了许多样品,但到目前为止没有任何效果。以下是我目前的尝试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;


namespace MCAPIClient
{
    class Program
    {
        static void Main(string[] args)
        {
           RunAsync().Wait();
        }

        static async Task RunAsync()
        {
            using (var client = new HttpClient())
            {

                var values = new Dictionary<string, string>
                {
                   { "oauth_consumer_key", "<my consumer key>" },
                   { "oauth_consumer_secret", "<my secret key>" }
                };

                var content = new FormUrlEncodedContent(values);

                var response = await client.PostAsync("https://app.masteryconnect.com/oauth/request_token", content);

                var responseString = await response.Content.ReadAsStringAsync();

                Console.WriteLine(response.Headers);

                Console.WriteLine("Press any key to continue...");
                Console.ReadKey(true);
            }
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Net.Http;
使用System.Net.Http.Header;
命名空间MCAPIClient
{
班级计划
{
静态void Main(字符串[]参数)
{
RunAsync().Wait();
}
静态异步任务RunAsync()
{
使用(var client=new HttpClient())
{
var值=新字典
{
{“oauth_consumer_key”,“”),
{“oauth_consumer_secret”,“”
};
var内容=新的FormUrlEncodedContent(值);
var response=wait client.PostAsync(“https://app.masteryconnect.com/oauth/request_token“,内容);
var responseString=await response.Content.ReadAsStringAsync();
Console.WriteLine(response.Headers);
Console.WriteLine(“按任意键继续…”);
Console.ReadKey(true);
}
}
}
}

这在使用未经身份验证的API(如)时效果很好,但在这样运行时收到401禁止。我错过了什么?顺便说一句,我是API的新手。

您必须拥有密钥和密码,或者用户名和密码。它们都是获取访问令牌所必需的。 我建议使用谷歌邮递员工具,它使生活更加容易的情况下,api的。 下面的代码将解决您的问题

 WebRequest req = WebRequest.Create(url);
        req.Method = "POST";
        req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("key:Secret"));
        req.Credentials = new NetworkCredential("username", "password");


        var postData = "grant_type=client_credentials";

        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = byteArray.Length;
        Stream dataStream = req.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        WebResponse response = req.GetResponse();
        // Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();

        Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(responseFromServer);

        String status = (string)o.SelectToken(".access_token");