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

标签 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: Looking up cache for a token...

iisexpress.exe Information: 0 : 07/03/2017 14:02:07: e608ec23-675f-4828-aa65-72479409ec63 - TokenCache: Looking up cache for a token...

Microsoft.IdentityModel.Clients.ActiveDirectory Information: 2 : 07/03/2017 14:02:07: e608ec23-675f-4828-aa65-72479409ec63 - TokenCache: No matching token was found in the cache

iisexpress.exe Information: 0 : 07/03/2017 14:02:07: e608ec23-675f-4828-aa65-72479409ec63 - TokenCache: No matching token was found in the cache


问题:如何连接? 谢谢。

最佳答案

根据你的描述,我猜这个方法不返回的原因是你在sync Controller方法中用wait关键字调用了async方法。

如果您如下调用 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

关于c# - 对 ApplicationTokenProvider.LoginSilentAsync 的调用永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44887805/

相关文章:

c# - 获取 contact.LastName 时出现 System.Runtime.InteropServices.COMException (0x800706BE)

java - 为什么 RestTemplate 并发调用时会挂起?

sql-server - 如何将 SQL Server 中的架构设为 "USE"

azure - 无法使用应用服务上的 Azure MSI 访问 Key Vault

c# - 使用 caliburn micro 在弹出控件中绑定(bind) UserControl

c# - 如何创建临时文件来缓存库的启动工作?

c# - 绑定(bind)仅适用于第一个 TabItem

java - 使用 JDBC 与 MySQL、JAVA REST 和 Python REST 进行序列化

java - 使用 Java 建立 REST 服务的最快方法是什么?

azure - 在 Azure WebJob 中使用 Akka.net Ask 超时