我有一个分配来访问Web API来获取令牌并使用此令牌作为调用另一个Web API的输入。令牌在60秒后过期,因此我必须再次调用第一个Web API来获取新令牌,然后使用此新令牌访问我的第二个Web API。 在正常情况下,它工作正常但有时候第二个API需要更多时间来执行和令牌过期。
我使用HttpClient
类来调用Web API。在调用另一个Web API之前,我应该如何处理令牌到期时间约束。我想让它更通用。
我写了以下代码。
public override bool CallAPI()
{
try
{
bool isSPAdded = false;
int counter = 0;
do
{
Uri uri = new Uri(_settings.HostUrl + "/auth/realms/master/protocol/openid-connect/token");
var requestContent = string.Format("username={0}&password={1}&client_id=admin-cli&grant_type=password", _settings.UserName, _settings.Password);
StringContent _requestContent = new StringContent(requestContent, Encoding.UTF8, "application/x-www-form-urlencoded");
_response = _client.PostAsync(uri, _requestContent).Result;
if (_response.IsSuccessStatusCode)
{
Uri uri = new Uri(String.Format(_settings.HostUrl + "/auth/admin/realms/{0}/clients", Node.OrgId));
_requestContent = new StringContent(response.Content.ReadAsStringAsync().Result, Encoding.UTF8, "application/json");
_response = _client.PostAsync(uri, _requestContent).Result;
if (_response.IsSuccessStatusCode)
{
isSPAdded = _response.IsSuccessStatusCode;
break;
}
}
counter++;
} while (_response.StatusCode == HttpStatusCode.Unauthorized && _response.Content.ReadAsStringAsync().Result == "Bearer" && counter < 2);
return isSPAdded;
}
}
如果令牌过期,我已经使用do while循环重试它。 请建议最好的方法。