对ApplicationTokenProvider.LoginSilentAsync的调用永远不会返回

时间:2017-07-03 14:13:31

标签: c# rest azure

从我的本地PC我正在尝试使用以下代码连接到AzureBillingAPI:

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantDomain, clientId, secret);

此方法永远不会返回。调试输出显示以下内容:

Microsoft.IdentityModel.Clients.ActiveDirectory Verbose:1:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:查找令牌的缓存......

iisexpress.exe信息:0:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:查找令牌的缓存......

Microsoft.IdentityModel.Clients.ActiveDirectory信息:2:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:在缓存中找不到匹配的标记

iisexpress.exe信息:0:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:在缓存中找不到匹配的令牌

问题:如何连接? 感谢。

1 个答案:

答案 0 :(得分:3)

根据你的描述,我猜这个方法永远不会返回的原因是你在同步控制器方法中使用等待关键字调用异步方法。

如果你按如下方式调用getResultAsync,它将永远不会返回结果:

    public ActionResult Index()
    {
       getResultAsync().Wait();
        return View();
    }

    public static async Task getResultAsync()
    {
        string subscription = "subid";

        string tenantid = "tenantid ";
        string clientId = "clientId ";
        string key = "key";

        var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantDomain, clientId, key);

        BillingManagementClient b1 = new BillingManagementClient(serviceCreds) { SubscriptionId = subscription };


        var result = b1.Operations.List();

    }

我建议您可以更改下面的索引方法,它会很好用:

   public async Task<ActionResult> Index()
        {
            await getResultAsync();
            return View();
        }

结果:

enter image description here