如何解决WebAPI令牌授权承载获取错误:操作已被取消
我正在开发.NET Core WebAPI(Core 3.1)项目,在该项目中,我必须使用基于OAuth2 Toekn的实现来调用外部第三方API。
基本上是两步过程。第一步是使用令牌API调用获取令牌,然后通过传递此Token-AccessCode和Input JSON进行对Export API的调用。
我可以使用下面的API控制器代码成功获得令牌,但是第二次API调用(导出API方法)抛出错误。 就像我在使用承载授权的Postman中进行测试时一样,它运行良好。
步骤(1)在邮递员中,“授权”选项卡设置为“无身份验证”。
步骤(2)标题标签具有以下两个设置(授权和内容类型)。
步骤(3)从“正文”标签中,我在JSON下方发送。
{
"oneOf": {
"schedule_date": "08/05/2020","request_date": null
},"start_time": "","end_time": "","order_number": "","status": ""
}
在上述3个设置之后,当我在Postman中调用POST方法时,它正在返回响应。 如下所示,APICode在行 exportClient.PostAsync()调用时引发错误。
错误: **例外:**操作已取消。 InnerException::无法从传输连接中读取数据:由于线程退出或应用程序请求,I / O操作已中止。
我在做什么错? 欣赏你的居所。
这是APIController代码:
[HttpGet]
[Route("PullOrders")]
public async Task<IActionResult> PullOrders(
)
{
try
{
var token = await GetElibilityToken();
string exportUrl = "https://XXXXXXX.com/api/v1/export";
var exportClient = new HttpClient();
//exportClient.DefaultRequestHeaders.Add("Authorization","Bearer " + token.AccessToken);
exportClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",token.AccessToken);
exportClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var oneData = new OneOf() { schedule_date = "08/05/2020" };
var orderReq = new PullOrderInputRequest() { oneOf = oneData };
var json = JsonConvert.SerializeObject(orderReq,Newtonsoft.Json.Formatting.Indented);
var stringContent = new StringContent(json);
HttpResponseMessage orderResponse = await **exportClient.PostAsync**(exportUrl,stringContent);
}
catch (Exception ex)
{
throw ex;
}
return Ok();
}
private static async Task<Token> GetElibilityToken()
{
var tokenClient = new HttpClient();
string baseAddress = @"https:// XXXXXXX/api/v1/oauth2/token";
string grant_type = "client_credentials";
string client_id = " XXXXXXX";
string client_secret = " XXXXXXXXXXXXXX ";
var form = new Dictionary<string,string>
{
{"grant_type",grant_type},{"client_id",client_id},{"client_secret",client_secret},};
HttpResponseMessage tokenResponse = await tokenClient.PostAsync(baseAddress,new FormUrlEncodedContent(form));
var jsonContent = await tokenResponse.Content.ReadAsStringAsync();
Token tok = JsonConvert.DeserializeObject<Token>(jsonContent);
return tok;
}
internal class Token
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。