You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:07:23