为什么创建token时会出错

问题描述 投票:0回答:1
 public static void CreateToken()
    {

        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("grant_type", "client_credentials");
        var UserPassJson = "{\"username\": \"mucode\",\"password\": \"mypassword\"}";

        HttpContent content = new StringContent(UserPassJson, Encoding.UTF8, "application/json");

        var response = client.PostAsync(new Uri("https://api.sandbox.paypal.com/v1/oauth2/token"), content).Result;
        if (response.IsSuccessStatusCode)
        {
            var responseContent = response.Content;
            string responseString = responseContent.ReadAsStringAsync().Result;
            Console.WriteLine(responseString);
        }
    }

为什么

response.IsSuccessStatusCode
显示状态代码 401?是什么原因导致故障? 什么行动会带来成功?

c# asp.net access-token dotnet-httpclient
1个回答
0
投票

文档指定您应使用基本身份验证传递用户名和密码,并且应传递包含

grant_type=client_credentials
的表单编码正文。

目前,您的代码添加

grant_type
作为标头,并将用户名和密码作为 JSON 对象发布到正文中。

按照文档所述的方式更正您的代码,我们得到:

HttpClient client = new HttpClient();
byte[] authBytes = System.Text.Encoding.ASCII.GetBytes("mucode:mypassword");
string base64Auth = Convert.ToBase64String(authBytes);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64Auth);

HttpContent content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "client_credentials") });

var response = client.PostAsync(new Uri("https://api.sandbox.paypal.com/v1/oauth2/token"), content).Result;
if (response.IsSuccessStatusCode)
{
    var responseContent = response.Content;
    string responseString = responseContent.ReadAsStringAsync().Result;
    Console.WriteLine(responseString);
}

附注我建议阅读 您错误地使用 HttpClient,它会破坏您的软件的稳定性 和后续内容 您(可能仍然)错误地使用 HttpClient,它会破坏您的软件的稳定性。我还建议采用这种方法

async
并将链条一直向上
async

© www.soinside.com 2019 - 2024. All rights reserved.