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