如何用Azure SDK for .NET获取Azure订阅中所有App Service Plan配置
获取Azure订阅中App Service Hosting Plan的SKU配置(.NET 8实现)
需求
- 使用Azure SDK for .NET实现
- 运行环境为.NET 8.0 Windows控制台应用
- 已持有
SubscriptionResource对象,示例中以subscription指代
预期目标
获取与Azure门户展示一致的App Service Hosting Plan SKU数据(包含Tier、Size、Family等信息),预期代码及输出如下:
预期代码
var skus = await AppServiceExtensions.GetSkusAsync(subscription); if (hostingPlanSkus != null) { Console.WriteLine("Available App Service SKUs:"); foreach (var sku in hostingPlanSkus) { Console.WriteLine($"Tier: {sku.Tier}, Name: {sku.Name}, Size: {sku.Size}, Family: {sku.Family}"); } }
预期输出
Available App Service SKUs: Tier: Free, Name: Free, Size: F1, Family: F Tier: Basic, Name: Basic1, Size: B1, Family: B Tier: Standard, Name: Standard1, Size: S1, Family: S Tier: PremiumV2, Name: PremiumV2_1, Size: P1v2, Family: Pv2
已尝试方案
- 调用
GetSkusAsync()始终返回null,更换不同订阅结果一致,代码如下:
var skus = await AppServiceExtensions.GetSkusAsync(subscription); foreach (var sku in skus.Value.Skus) { Console.WriteLine($"- Tier: {sku.Tier}, Size: {sku.Size}, Name: {sku.Name}"); }
- 尝试使用
MockableAppServiceSubscriptionResource,但无法生成可调用GetSkusAsync的对象。
解决方案
正确实现代码
首先确保安装NuGet包:Azure.ResourceManager.AppService
使用SubscriptionResource的GetAppServiceSkusAsync方法获取SKU数据,这是Azure SDK for .NET的标准用法:
using Azure.ResourceManager.AppService; using Azure.ResourceManager.Resources; using System.Linq; // 假设已通过认证获取到SubscriptionResource实例subscription var skuCollection = await subscription.GetAppServiceSkusAsync().ToListAsync(); Console.WriteLine("Available App Service SKUs:"); foreach (var sku in skuCollection) { Console.WriteLine($"Tier: {sku.Tier}, Name: {sku.Name}, Size: {sku.Size}, Family: {sku.Family}"); }
按位置过滤SKU(可选)
不同Azure区域的可用SKU可能存在差异,若需获取指定区域的SKU,可传入位置参数:
var targetLocation = "East US"; var skuCollection = await subscription.GetAppServiceSkusAsync(targetLocation).ToListAsync();
问题说明
- 之前调用的
AppServiceExtensions.GetSkusAsync并非正确的扩展方法,标准SDK中SubscriptionResource提供的GetAppServiceSkusAsync才是获取App Service SKU的正确入口。 MockableAppServiceSubscriptionResource仅用于单元测试场景,生产环境应直接使用通过Azure认证获取的SubscriptionResource实例。
内容的提问来源于stack exchange,提问作者Burgha
相关产品推荐
相关产品推荐

