Oauth 如何使用HttpClient获取宣誓令牌?

Oauth 如何使用HttpClient获取宣誓令牌?,oauth,dotnet-httpclient,Oauth,Dotnet Httpclient,我需要一张休息电话的代币。 标记应位于JSON结果中 以下是我尝试的方式: private async void GetBicDataAsync() { HttpClient _bicAothClient; _bicAothClient = new HttpClient(); _bicAothClient.DefaultRequestHeaders.Add("Authorization", "Basic YmljYXBwOmJpY3Nl

我需要一张休息电话的代币。 标记应位于JSON结果中

以下是我尝试的方式:

private async void GetBicDataAsync()
    {
        HttpClient _bicAothClient;

        _bicAothClient = new HttpClient();
        _bicAothClient.DefaultRequestHeaders.Add("Authorization", "Basic YmljYXBwOmJpY3NlY3JldGFwcA==");

        var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("grant_type", "password"),
            new KeyValuePair<string, string>("username", Constants.BicAothUser),
            new KeyValuePair<string, string>("password", Constants.BicAothPassword)
        });

        var result = await _bicAothClient.PostAsync(Constants.BicAothEndpoint, content);
    }
我做错了什么。我觉得这是一次愚蠢的小失败。
有人能帮我吗。

我联系了提供商,查看了。。。维基错了。我需要的两个URL都不正确。 现在,这里有一个代码可以获取您想要的一切:

private async void GetBicDataAsync()
        {
            //  HttpClient to get the token
            HttpClient bicAothClient;
            bicAothClient = new HttpClient();

            //  Add header
            bicAothClient.DefaultRequestHeaders.Add("Authorization", "Basic YmljYXBwOmJpY3NlY3JldGFwcA==");

            //  Set parameters
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("grant_type", "password"),
                new KeyValuePair<string, string>("username", <USERNAME>),
                new KeyValuePair<string, string>("password", <PASSWORD>)
            });

            //  POST async
            var result = await _bicAothClient.PostAsync("https://app.bic-boxtech.org/oauth/token/", content);

            //  Get content as string
            var contentString = await result.Content.ReadAsStringAsync();

            //  Parse content, to get the accessToken
            var r = JToken.Parse(contentString);
            var token = r["accessToken"].Value<string>();


            //  HttpClient to get container data
            HttpClient _bicDataClient;
            bicDataClient = new HttpClient();

            //  Add accessToken to header
            bicDataClient.DefaultRequestHeaders.Add("Authorization", ("Bearer " + token));

            //  Get container data
            var bicData = await bicDataClient.GetAsync("https://app.bic-boxtech.org/api/v2.0/container/" + <CONTAINERNUMBER>);

            //  Get content as string
            var containerDataString = await bicData.Content.ReadAsStringAsync();

            //  Do what you need with this content
        }
private async void GetBicDataAsync()
{
//HttpClient以获取令牌
HttpClient-bicAothClient;
bicAothClient=new-HttpClient();
//添加标题
添加(“授权”,“基本YmljYXBwOmJpY3NlY3JldGFwcA==”;
//设置参数
var content=newformurlencodedcontent(new[]
{
新的KeyValuePair(“授权类型”、“密码”),
新的KeyValuePair(“用户名”),
新的KeyValuePair(“密码”,)
});
//后异步
var结果=等待_bicAothClient.PostAsync(“https://app.bic-boxtech.org/oauth/token/“,内容);
//以字符串形式获取内容
var contentString=await result.Content.ReadAsStringAsync();
//解析内容,以获取accessToken
var r=JToken.Parse(contentString);
var-token=r[“accessToken”].Value();
//HttpClient获取容器数据
HttpClient bicDataClient;
bicDataClient=新的HttpClient();
//将accessToken添加到标头
bicDataClient.DefaultRequestHeaders.Add(“授权”,“承载者”+令牌));
//获取容器数据
var bicData=wait bicDataClient.GetAsync(“https://app.bic-boxtech.org/api/v2.0/container/" + );
//以字符串形式获取内容
var containerDataString=wait bicData.Content.ReadAsStringAsync();
//使用此内容执行所需操作
}

如果以字符串形式获取内容,则可以使用此代码从端点获取每个值:

        //  Ask if the container is found in dataBase
        if (bicData.ReasonPhrase == "OK")
        {
            //  Get content as string
            var containerDataString = await bicData.Content.ReadAsStringAsync();

            //  Get a list of JObjects out of the content string
            IEnumerable<JObject> objs = JsonConvert.DeserializeObject<List<JObject>>(containerDataString);

            //  Select the first JObject of the list
            JObject containerDataJObject = objs.FirstOrDefault();

            //  Assign values as string
            var tareKg  = containerDataJObject["tare_kg"].Value<string>();
            var tareLb  = containerDataJObject["tare_lbs"].Value<string>();
            var netKg   = containerDataJObject["max_payload_kg"].Value<string>();
            var netLb   = containerDataJObject["max_payload_lbs"].Value<string>();
            var maxKg   = containerDataJObject["max_gross_mass_kg"].Value<string>();
            var maxLb   = containerDataJObject["max_gross_mass_lbs"].Value<string>();
            var cubicM  = containerDataJObject["cubic_capacity_cbm"].Value<string>();
            var cubicFt = containerDataJObject["cubic_capacity_cuft"].Value<string>();

           // And so on...
        }
//询问是否在数据库中找到该容器
如果(bicData.ReasonPhrase==“确定”)
{
//以字符串形式获取内容
var containerDataString=wait bicData.Content.ReadAsStringAsync();
//从内容字符串中获取作业对象列表
IEnumerable objs=JsonConvert.DeserializeObject(containerDataString);
//选择列表中的第一个作业对象
JObject containerDataJObject=objs.FirstOrDefault();
//将值指定为字符串
var tareKg=containerDataJObject[“皮重”].Value();
var tareLb=containerDataJObject[“皮重磅”].Value();
var netKg=containerDataJObject[“最大有效载荷”]。值();
var netLb=containerDataJObject[“最大有效负载”].Value();
var maxKg=集装箱数据对象[“最大总质量”]。值();
var maxLb=容器数据对象[“最大总质量”]。值();
var cubicM=集装箱数据作业对象[“立方容量煤层气]。值();
var cubicFt=containerDataJObject[“cubic_capacity_cuft”]。Value();
//等等。。。
}

你可以大摇大摆地看到所有物品。

我认为你没有做错什么。显然,您正在使用POST方法。我会联系这个API的提供者并询问他们。
        //  Ask if the container is found in dataBase
        if (bicData.ReasonPhrase == "OK")
        {
            //  Get content as string
            var containerDataString = await bicData.Content.ReadAsStringAsync();

            //  Get a list of JObjects out of the content string
            IEnumerable<JObject> objs = JsonConvert.DeserializeObject<List<JObject>>(containerDataString);

            //  Select the first JObject of the list
            JObject containerDataJObject = objs.FirstOrDefault();

            //  Assign values as string
            var tareKg  = containerDataJObject["tare_kg"].Value<string>();
            var tareLb  = containerDataJObject["tare_lbs"].Value<string>();
            var netKg   = containerDataJObject["max_payload_kg"].Value<string>();
            var netLb   = containerDataJObject["max_payload_lbs"].Value<string>();
            var maxKg   = containerDataJObject["max_gross_mass_kg"].Value<string>();
            var maxLb   = containerDataJObject["max_gross_mass_lbs"].Value<string>();
            var cubicM  = containerDataJObject["cubic_capacity_cbm"].Value<string>();
            var cubicFt = containerDataJObject["cubic_capacity_cuft"].Value<string>();

           // And so on...
        }