【发布时间】:2019-08-08 08:03:08
【问题描述】:
我试着按照你的建议去做(在下面回答)。不幸的是我仍然有这个问题。 这是我的新 TokenService.cs: 类令牌服务
{
TokenKeeper tokenkeeper;
public TokenService()
{
tokenkeeper = new TokenKeeper();
}
public async void AwaitGetToken()
{
tokenkeeper = new TokenKeeper();
tokenkeeper = await GetToken();
}
private async Task<TokenKeeper> GetToken()
{
string stringuri = string.Format("{0}/token", RestAccess.HostUrl);
var dict = new Dictionary<string, string>();
dict.Add("grant_type", "password");
dict.Add("username", RestAccess.User);
dict.Add("password", RestAccess.Pass);
dict.Add("client_id", RestAccess.Client_ID);
dict.Add("client_secret", RestAccess.Client_secret);
tokenkeeper=new TokenKeeper();
var httpclient = new HttpClient();
try
{
var req = new HttpRequestMessage(HttpMethod.Post, stringuri) { Content = new FormUrlEncodedContent(dict) };
var res = await httpclient.SendAsync(req);
if (res.IsSuccessStatusCode)
{
var content = await res.Content.ReadAsStringAsync();
tokenkeeper = JsonConvert.DeserializeObject<TokenKeeper>(content);
return tokenkeeper;
}
return tokenkeeper;
}
catch
{
return tokenkeeper;
}
finally
{
httpclient.CancelPendingRequests();
httpclient.Dispose();
}
}
}
我的 tokenkeeper 是简单的类:
public class TokenKeeper
{
public string access_token { get; set; }
public string refresh_token { get; set; }
public TokenKeeper()
{
access_token = "";
refresh_token = "";
}
}
在我的调用代码中,我的代码如下:
...
tokenservice.AwaitGetToken();
GetXFMapUserFromAzureAndSetVariable(RestAccess.User);
_navigationService.NavigateAsync("ZleceniaListContentPage", par);
...
tokenservice.AwaitGetToken() 和 GEtXFMapUserFromAzureAndSetVariable(RestAccess.User) 它们是相似的。两者都在等待,但 tokenservice.AwaitGetToken() 是 POST,而 GEtXFMapUserFromAzureAndSetVariable 是 GET。 GEtXFMapUserFromAzureAndSetVariable 工作正常,但如果我调用 tokenservice.AwaitGetToken() 应用程序会在继续之前获取令牌。最后,指令 GEtXFMapUserFromAzureAndSetVariable 正在完成 tokenservice.AwaitGetToken() 响应。
我如何才能等待调用 GEtXFMapUserFromAzureAndSetVariable 直到收到来自 tokenservice.AwaitGetToken() 的回复???
【问题讨论】:
-
查看方法定义
GetTokenPublicnTokenService类,我假设你没有等待令牌获取,等待它直到你得到响应。
标签: c# xamarin.forms token httpclient