如何通过Azure .NET SDK获取ApiManagementSubscriptionResource实例生成APIM订阅密钥
问题翻译
我想要在C#应用中使用Azure APIM管理SDK生成APIM订阅密钥,但无法获取ApiManagementSubscriptionResource类实例,也不清楚如何调用其CreateResourceIdentifier(String, String, String, String)方法。现有代码片段如下,望得到指导:
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync(); ResourceGroupCollection resourceGroups = subscription.GetResourceGroups(); ResourceGroupResource resourceGroup = await resourceGroups.GetAsync("rg_name"); var apiManagements = await resourceGroup.GetApiManagementServiceAsync("apim_name");
解决方法
1. 先修正基础代码
你当前的代码已经拿到了APIM服务实例,但变量名apiManagements容易混淆(该方法返回单个服务资源),建议先修正为:
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync(); ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync("rg_name"); // 明确类型为单个APIM服务资源 ApiManagementServiceResource apiManagementService = await resourceGroup.GetApiManagementServiceAsync("apim_name");
2. ApiManagementSubscriptionResource实例的获取方式
有两种常见场景:
场景1:获取已存在的订阅
通过APIM服务实例的订阅集合,根据APIM内部的订阅ID获取实例:
// 替换为你的APIM订阅ID(比如"test-api-subscription") string apimSubscriptionId = "your-target-subscription-id"; ApiManagementSubscriptionResource subscriptionResource = await apiManagementService.GetApiManagementSubscriptionAsync(apimSubscriptionId);
场景2:创建新订阅并生成密钥
直接通过订阅集合的CreateOrUpdateAsync方法创建,SDK会自动生成密钥(也可自定义):
var createParams = new ApiManagementSubscriptionData { // 订阅范围:可以是API(/apis/{api-id})、产品(/products/{product-id})或整个服务(/) Scope = "/apis/your-api-id", DisplayName = "业务系统专用订阅" // 不指定PrimaryKey/SecondaryKey时,SDK会自动生成随机密钥 }; // 创建并获取新订阅实例 ApiManagementSubscriptionResource newSubscription = await apiManagementService.GetApiManagementSubscriptions() .CreateOrUpdateAsync(WaitUntil.Completed, "new-subscription-id", createParams); // 读取自动生成的密钥 string primaryKey = newSubscription.Data.PrimaryKey; string secondaryKey = newSubscription.Data.SecondaryKey;
3. CreateResourceIdentifier方法的正确用法
这是一个静态方法,用于构造订阅资源的完整ID,主要用于通过资源ID直接获取实例的场景,参数顺序为:
- Azure订阅ID(即
subscription.Id.SubscriptionId) - 资源组名称
- APIM服务名称
- APIM内部的订阅ID
调用示例:
string resourceId = ApiManagementSubscriptionResource.CreateResourceIdentifier( subscriptionId: subscription.Id.SubscriptionId, resourceGroupName: "rg_name", serviceName: "apim_name", subscriptionId: "your-apim-subscription-id"); // 通过资源ID直接获取订阅实例 ApiManagementSubscriptionResource subscriptionResource = client.GetApiManagementSubscriptionResource(resourceId); await subscriptionResource.GetAsync();
4. 重新生成订阅密钥示例
如果需要给已有订阅重新生成密钥,可通过UpdateAsync方法:
var updateParams = new ApiManagementSubscriptionUpdateProperties { // 自定义主键,留空则SDK自动生成新密钥 PrimaryKey = Guid.NewGuid().ToString("N"), // 可选:同时更新副键 SecondaryKey = Guid.NewGuid().ToString("N") }; await subscriptionResource.UpdateAsync(WaitUntil.Completed, updateParams);
内容的提问来源于stack exchange,提问作者WenHao
相关产品推荐
相关产品推荐

