基于时间约束多次执行web api方法

时间:2016-07-30 16:36:53

标签: c#-4.0 asp.net-web-api

我有一个分配来访问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循环重试它。 请建议最好的方法。

0 个答案:

没有答案