Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.Azure.Management.Consument.NET软件包和API版本_C#_Azure_Consumption - Fatal编程技术网

C# Microsoft.Azure.Management.Consument.NET软件包和API版本

C# Microsoft.Azure.Management.Consument.NET软件包和API版本,c#,azure,consumption,C#,Azure,Consumption,我正在尝试使用3.0.2包来访问使用和消费数据 但是,在调用UsageDetails.List时,我发现以下错误: 当前api版本不支持订阅作用域用法。请使用2019-10-01之后的api版本 是否有支持此版本的包的新版本(或预期会有) 在此期间,我还有什么选择 我可以直接使用一个GET-country https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.Consumptio

我正在尝试使用3.0.2包来访问使用和消费数据

但是,在调用
UsageDetails.List
时,我发现以下错误:

当前api版本不支持订阅作用域用法。请使用2019-10-01之后的api版本

是否有支持此版本的包的新版本(或预期会有)

在此期间,我还有什么选择

我可以直接使用一个GET-country

https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.Consumption/usageDetails?api-version=2019-10-01
验证代码示例:

private static AuthenticationResult GetToken()
{
    string clientId = "MyappId";

    string[] scopes = new string[] { "https://management.azure.com/.default" };
    var app = PublicClientApplicationBuilder
        .Create(clientId)
        .WithRedirectUri("https://localhost")
        .WithTenantId("TenantId I want to check")
        .Build();
    var task = app.GetAccountsAsync();
    task.Wait();
    var accounts = task.Result;
    try
    {
        var task1 = app.AcquireTokenSilent(scopes, accounts.FirstOrDefault()).ExecuteAsync();
        task1.Wait();
        return task1.Result;
    }
    catch (MsalUiRequiredException)
    {
        var task2 = app.AcquireTokenInteractive(scopes).ExecuteAsync();
        task2.Wait();
        return task2.Result;
    }
}

根据我的研究,我们可以初始化
ServiceClientCredentials
来创建
ConsumptionManagementClient
,而
ServiceClientCredentials
具有方法
ProcessHttpRequestAsync
,我们可以使用该方法来重新创建请求

比如说

  • 实施
    ServiceClientCredentials

  • 根据我的研究,我们可以初始化
    ServiceClientCredentials
    来创建
    ConsumptionManagementClient
    ,而
    ServiceClientCredentials
    具有方法
    ProcessHttpRequestAsync
    ,我们可以使用该方法来重新创建请求

    比如说

  • 实施
    ServiceClientCredentials

  • 你提到了吗?我刚刚提出了一个问题,问你能提供你的代码吗?提供了代码。谢谢你能告诉我你的订阅类型吗?你提到过吗?我刚刚创建了一个问题,问你能提供你的代码吗?提供的代码。谢谢你能告诉我你的订阅类型吗?
    private static AuthenticationResult GetToken()
    {
        string clientId = "MyappId";
    
        string[] scopes = new string[] { "https://management.azure.com/.default" };
        var app = PublicClientApplicationBuilder
            .Create(clientId)
            .WithRedirectUri("https://localhost")
            .WithTenantId("TenantId I want to check")
            .Build();
        var task = app.GetAccountsAsync();
        task.Wait();
        var accounts = task.Result;
        try
        {
            var task1 = app.AcquireTokenSilent(scopes, accounts.FirstOrDefault()).ExecuteAsync();
            task1.Wait();
            return task1.Result;
        }
        catch (MsalUiRequiredException)
        {
            var task2 = app.AcquireTokenInteractive(scopes).ExecuteAsync();
            task2.Wait();
            return task2.Result;
        }
    }
    
    class CustomLoginCredentials : ServiceClientCredentials
        {
           
            private string AuthenticationToken { get; set; }
            public override void InitializeServiceClient<T>(ServiceClient<T> client)
            {
               string clientId = "MyappId";
    
        string[] scopes = new string[] { "https://management.azure.com/.default" };
        var app = PublicClientApplicationBuilder
            .Create(clientId)
            .WithRedirectUri("https://localhost")
            .WithTenantId("TenantId I want to check")
            .Build();
                var task = app.GetAccountsAsync();
                task.Wait();
                var accounts = task.Result;
                try
                {
                    var task1 = app.AcquireTokenSilent(scopes, accounts.FirstOrDefault()).ExecuteAsync();
                    task1.Wait();
                    AuthenticationToken= task1.Result.AccessToken;
                }
                catch (MsalUiRequiredException)
                {
                    var task2 = app.AcquireTokenInteractive(scopes).ExecuteAsync();
                    task2.Wait();
                    AuthenticationToken= task2.Result.AccessToken;
                }
                
            }
            public override async Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }
    
                if (AuthenticationToken == null)
                {
                    throw new InvalidOperationException("Token Provider Cannot Be Null");
                }
    
                var url = request.RequestUri.ToString().Split('?')[0] + "?";
                var querys = request.RequestUri.ToString().Split('?')[1].Split('&');
                for (var i = 1; i <= querys.Length; i++)
                {
    
                    if (querys[i - 1].StartsWith("api-version"))
                    {
                        url += "api-version=2019-10-01";
                    }
                    else
                    {
                        url += querys[i - 1];
                    }
    
    
                    if (i < querys.Length)
                    {
    
                        url += "&";
                    }
    
    
    
                }
    
                Console.WriteLine(url);
    
                request.RequestUri = new Uri(url);
    
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AuthenticationToken);
    
    
    
                await base.ProcessHttpRequestAsync(request, cancellationToken);
    
            }
    
    
    
        }
    
     var cred = new CustomLoginCredentials();
    ConsumptionManagementClient client = new ConsumptionManagementClient(cred);
    client.SubscriptionId = "SubscriptionId I would like to check"; 
    var usage = client.UsageDetails.List();