Azure Mgmt Apimanagement Dotnet

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Azure Resource Manager SDK for API Management in .NET. Use for MANAGEMENT PLANE operations: creating/managing APIM services, APIs, products, subscriptions, policies, users, groups, gateways, and backends via Azure Resource Manager. Triggers: "API Management", "APIM service", "create APIM", "manage APIs", "ApiManagementServiceResource", "API policies", "APIM products", "APIM subscriptions".

精选仅含说明DevOps & Cloud
AI 生成的概览

指导通过 Azure Resource Manager 用 .NET 管理平面预配 Azure API Management 服务、API、产品、订阅和策略。

功能
该技能提供通过 Azure Resource Manager SDK(Azure.ResourceManager.ApiManagement)管理 Azure API Management 的 .NET 代码模式。内容涵盖使用 DefaultAzureCredential 进行身份验证、ARM 资源层级,以及创建或更新 APIM 服务、API、产品、订阅、策略、用户、组、网关和后端。还说明了 SKU 类型、备份与还原、使用 RequestFailedException 处理错误,以及 WaitUntil 用法等最佳实践。参考文件涵盖服务管理、API 与操作,以及产品与订阅。
适用场景
适用于编写在管理平面预配或管理 Azure API Management 资源的 .NET 代码,例如创建 APIM 服务、发布 API 或附加策略。不适用于直接对 APIM 网关终结点进行数据平面调用。
运行要求
需要 .NET SDK 以及 Azure.ResourceManager.ApiManagement 和 Azure.Identity NuGet 包、一个 Azure 订阅和凭据(如 AZURE_SUBSCRIPTION_ID 等环境变量,以及租户/客户端/密钥或托管标识)。需要访问 Azure Resource Manager 的网络连接。不附带脚本,仅为说明文档和参考文档。

Azure.ResourceManager.ApiManagement (.NET)

Management plane SDK for provisioning and managing Azure API Management resources via Azure Resource Manager.

⚠️ Management vs Data Plane

  • This SDK (Azure.ResourceManager.ApiManagement): Create services, APIs, products, subscriptions, policies, users, groups
  • Data Plane: Direct API calls to your APIM gateway endpoints

Installation

bash
dotnet add package Azure.ResourceManager.ApiManagementdotnet add package Azure.Identity

Current Version: v1.3.0

Environment Variables

bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription IDAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in productionAZURE_TENANT_ID=<tenant-id> # For service principal auth (optional)AZURE_CLIENT_ID=<client-id> # For service principal auth (optional)AZURE_CLIENT_SECRET=<client-secret> # For service principal auth (optional)

Authentication

csharp
using Azure.Identity;using Azure.ResourceManager;using Azure.ResourceManager.ApiManagement;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential(    DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();var armClient = new ArmClient(credential);
// Get subscriptionvar subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");var subscription = armClient.GetSubscriptionResource(    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

Resource Hierarchy

ArmClient└── SubscriptionResource    └── ResourceGroupResource        └── ApiManagementServiceResource            ├── ApiResource            │   ├── ApiOperationResource            │   │   └── ApiOperationPolicyResource            │   ├── ApiPolicyResource            │   ├── ApiSchemaResource            │   └── ApiDiagnosticResource            ├── ApiManagementProductResource            │   ├── ProductApiResource            │   ├── ProductGroupResource            │   └── ProductPolicyResource            ├── ApiManagementSubscriptionResource            ├── ApiManagementPolicyResource            ├── ApiManagementUserResource            ├── ApiManagementGroupResource            ├── ApiManagementBackendResource            ├── ApiManagementGatewayResource            ├── ApiManagementCertificateResource            ├── ApiManagementNamedValueResource            └── ApiManagementLoggerResource

Core Workflow

1. Create API Management Service

csharp
using Azure.ResourceManager.ApiManagement;using Azure.ResourceManager.ApiManagement.Models;
// Get resource groupvar resourceGroup = await subscription    .GetResourceGroupAsync("my-resource-group");
// Define servicevar serviceData = new ApiManagementServiceData(    location: AzureLocation.EastUS,    sku: new ApiManagementServiceSkuProperties(        ApiManagementServiceSkuType.Developer,         capacity: 1),    publisherEmail: "[email protected]",    publisherName: "Contoso");
// Create service (long-running operation - can take 30+ minutes)var serviceCollection = resourceGroup.Value.GetApiManagementServices();var operation = await serviceCollection.CreateOrUpdateAsync(    WaitUntil.Completed,    "my-apim-service",    serviceData);
ApiManagementServiceResource service = operation.Value;

2. Create an API

csharp
var apiData = new ApiCreateOrUpdateContent{    DisplayName = "My API",    Path = "myapi",    Protocols = { ApiOperationInvokableProtocol.Https },    ServiceUri = new Uri("https://backend.contoso.com/api")};
var apiCollection = service.GetApis();var apiOperation = await apiCollection.CreateOrUpdateAsync(    WaitUntil.Completed,    "my-api",    apiData);
ApiResource api = apiOperation.Value;

3. Create a Product

csharp
var productData = new ApiManagementProductData{    DisplayName = "Starter",    Description = "Starter tier with limited access",    IsSubscriptionRequired = true,    IsApprovalRequired = false,    SubscriptionsLimit = 1,    State = ApiManagementProductState.Published};
var productCollection = service.GetApiManagementProducts();var productOperation = await productCollection.CreateOrUpdateAsync(    WaitUntil.Completed,    "starter",    productData);
ApiManagementProductResource product = productOperation.Value;
// Add API to productawait product.GetProductApis().CreateOrUpdateAsync(    WaitUntil.Completed,    "my-api");

4. Create a Subscription

csharp
var subscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent{    DisplayName = "My Subscription",    Scope = $"/products/{product.Data.Name}",    State = ApiManagementSubscriptionState.Active};
var subscriptionCollection = service.GetApiManagementSubscriptions();var subOperation = await subscriptionCollection.CreateOrUpdateAsync(    WaitUntil.Completed,    "my-subscription",    subscriptionData);
ApiManagementSubscriptionResource subscription = subOperation.Value;
// Get subscription keysvar keys = await subscription.GetSecretsAsync();Console.WriteLine($"Primary Key: {keys.Value.PrimaryKey}");

5. Set API Policy

csharp
var policyXml = @"<policies>    <inbound>        <rate-limit calls=""100"" renewal-period=""60"" />        <set-header name=""X-Custom-Header"" exists-action=""override"">            <value>CustomValue</value>        </set-header>        <base />    </inbound>    <backend>        <base />    </backend>    <outbound>        <base />    </outbound>    <on-error>        <base />    </on-error></policies>";
var policyData = new PolicyContractData{    Value = policyXml,    Format = PolicyContentFormat.Xml};
await api.GetApiPolicy().CreateOrUpdateAsync(    WaitUntil.Completed,    policyData);

6. Backup and Restore

csharp
// Backupvar backupParams = new ApiManagementServiceBackupRestoreContent(    storageAccount: "mystorageaccount",    containerName: "apim-backups",    backupName: "backup-2024-01-15"){    AccessType = StorageAccountAccessType.SystemAssignedManagedIdentity};
await service.BackupAsync(WaitUntil.Completed, backupParams);
// Restoreawait service.RestoreAsync(WaitUntil.Completed, backupParams);

Key Types Reference

TypePurpose
ArmClientEntry point for all ARM operations
ApiManagementServiceResourceRepresents an APIM service instance
ApiManagementServiceCollectionCollection for service CRUD
ApiResourceRepresents an API
ApiManagementProductResourceRepresents a product
ApiManagementSubscriptionResourceRepresents a subscription
ApiManagementPolicyResourceService-level policy
ApiPolicyResourceAPI-level policy
ApiManagementUserResourceRepresents a user
ApiManagementGroupResourceRepresents a group
ApiManagementBackendResourceRepresents a backend service
ApiManagementGatewayResourceRepresents a self-hosted gateway

SKU Types

SKUPurposeCapacity
DeveloperDevelopment/testing (no SLA)1
BasicEntry-level production1-2
StandardMedium workloads1-4
PremiumHigh availability, multi-region1-12 per region
ConsumptionServerless, pay-per-callN/A

Best Practices

  1. Use WaitUntil.Completed for operations that must finish before proceeding
  2. Use WaitUntil.Started for long operations like service creation (30+ min)
  3. Always use DefaultAzureCredential — never hardcode keys
  4. Handle RequestFailedException for ARM API errors
  5. Use CreateOrUpdateAsync for idempotent operations
  6. Navigate hierarchy via Get* methods (e.g., service.GetApis())
  7. Policy format — Use XML format for policies; JSON is also supported
  8. Service creation — Developer SKU is fastest for testing (~15-30 min)

Error Handling

csharp
using Azure;
try{    var operation = await serviceCollection.CreateOrUpdateAsync(        WaitUntil.Completed, serviceName, serviceData);}catch (RequestFailedException ex) when (ex.Status == 409){    Console.WriteLine("Service already exists");}catch (RequestFailedException ex) when (ex.Status == 400){    Console.WriteLine($"Bad request: {ex.Message}");}catch (RequestFailedException ex){    Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");}

Reference Files

FileWhen to Read
references/service-management.md [blocked]Service CRUD, SKUs, networking, backup/restore
references/apis-operations.md [blocked]APIs, operations, schemas, versioning
references/products-subscriptions.md [blocked]Products, subscriptions, access control
references/policies.md [blocked]Policy XML patterns, scopes, common policies

Related Resources

ResourcePurpose
API Management DocumentationOfficial Azure docs
Policy ReferenceComplete policy reference
SDK Reference.NET API reference

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-apimanagement-dotnet提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架