[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FD4S0RYB7G7DPC0CSCHCFD":3,"skill-same:01M6FD4S0RYB7G7DPC0CSCHCFD":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6FD4S0RYB7G7DPC0CSCHCFD","azure-mgmt-apimanagement-dotnet",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmicrosoft\u002Fskills\u002Fazure-mgmt-apimanagement-dotnet\u002FSKILL.md",[],[18,19,20],"dotnet","azure","azure mgmt apimanagement dotnet","2026-11-10 10:12:30",false,"# Azure.ResourceManager.ApiManagement (.NET)\n\nManagement plane SDK for provisioning and managing Azure API Management resources via Azure Resource Manager.\n\n> **⚠️ Management vs Data Plane**\n> - **This SDK (Azure.ResourceManager.ApiManagement)**: Create services, APIs, products, subscriptions, policies, users, groups\n> - **Data Plane**: Direct API calls to your APIM gateway endpoints\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.ApiManagement\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.3.0\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\n# For service principal auth (optional)\nAZURE_TENANT_ID=\u003Ctenant-id>\nAZURE_CLIENT_ID=\u003Cclient-id>\nAZURE_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.ApiManagement;\n\n\u002F\u002F Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── ApiManagementServiceResource\n            ├── ApiResource\n            │   ├── ApiOperationResource\n            │   │   └── ApiOperationPolicyResource\n            │   ├── ApiPolicyResource\n            │   ├── ApiSchemaResource\n            │   └── ApiDiagnosticResource\n            ├── ApiManagementProductResource\n            │   ├── ProductApiResource\n            │   ├── ProductGroupResource\n            │   └── ProductPolicyResource\n            ├── ApiManagementSubscriptionResource\n            ├── ApiManagementPolicyResource\n            ├── ApiManagementUserResource\n            ├── ApiManagementGroupResource\n            ├── ApiManagementBackendResource\n            ├── ApiManagementGatewayResource\n            ├── ApiManagementCertificateResource\n            ├── ApiManagementNamedValueResource\n            └── ApiManagementLoggerResource\n```\n\n## Core Workflow\n\n### 1. Create API Management Service\n\n```csharp\nusing Azure.ResourceManager.ApiManagement;\nusing Azure.ResourceManager.ApiManagement.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define service\nvar serviceData = new ApiManagementServiceData(\n    location: AzureLocation.EastUS,\n    sku: new ApiManagementServiceSkuProperties(\n        ApiManagementServiceSkuType.Developer, \n        capacity: 1),\n    publisherEmail: \"admin@contoso.com\",\n    publisherName: \"Contoso\");\n\n\u002F\u002F Create service (long-running operation - can take 30+ minutes)\nvar serviceCollection = resourceGroup.Value.GetApiManagementServices();\nvar operation = await serviceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-apim-service\",\n    serviceData);\n\nApiManagementServiceResource service = operation.Value;\n```\n\n### 2. Create an API\n\n```csharp\nvar apiData = new ApiCreateOrUpdateContent\n{\n    DisplayName = \"My API\",\n    Path = \"myapi\",\n    Protocols = { ApiOperationInvokableProtocol.Https },\n    ServiceUri = new Uri(\"https:\u002F\u002Fbackend.contoso.com\u002Fapi\")\n};\n\nvar apiCollection = service.GetApis();\nvar apiOperation = await apiCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-api\",\n    apiData);\n\nApiResource api = apiOperation.Value;\n```\n\n### 3. Create a Product\n\n```csharp\nvar productData = new ApiManagementProductData\n{\n    DisplayName = \"Starter\",\n    Description = \"Starter tier with limited access\",\n    IsSubscriptionRequired = true,\n    IsApprovalRequired = false,\n    SubscriptionsLimit = 1,\n    State = ApiManagementProductState.Published\n};\n\nvar productCollection = service.GetApiManagementProducts();\nvar productOperation = await productCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"starter\",\n    productData);\n\nApiManagementProductResource product = productOperation.Value;\n\n\u002F\u002F Add API to product\nawait product.GetProductApis().CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-api\");\n```\n\n### 4. Create a Subscription\n\n```csharp\nvar subscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent\n{\n    DisplayName = \"My Subscription\",\n    Scope = $\"\u002Fproducts\u002F{product.Data.Name}\",\n    State = ApiManagementSubscriptionState.Active\n};\n\nvar subscriptionCollection = service.GetApiManagementSubscriptions();\nvar subOperation = await subscriptionCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-subscription\",\n    subscriptionData);\n\nApiManagementSubscriptionResource subscription = subOperation.Value;\n\n\u002F\u002F Get subscription keys\nvar keys = await subscription.GetSecretsAsync();\nConsole.WriteLine($\"Primary Key: {keys.Value.PrimaryKey}\");\n```\n\n### 5. Set API Policy\n\n```csharp\nvar policyXml = @\"\n\u003Cpolicies>\n    \u003Cinbound>\n        \u003Crate-limit calls=\"\"100\"\" renewal-period=\"\"60\"\" \u002F>\n        \u003Cset-header name=\"\"X-Custom-Header\"\" exists-action=\"\"override\"\">\n            \u003Cvalue>CustomValue\u003C\u002Fvalue>\n        \u003C\u002Fset-header>\n        \u003Cbase \u002F>\n    \u003C\u002Finbound>\n    \u003Cbackend>\n        \u003Cbase \u002F>\n    \u003C\u002Fbackend>\n    \u003Coutbound>\n        \u003Cbase \u002F>\n    \u003C\u002Foutbound>\n    \u003Con-error>\n        \u003Cbase \u002F>\n    \u003C\u002Fon-error>\n\u003C\u002Fpolicies>\";\n\nvar policyData = new PolicyContractData\n{\n    Value = policyXml,\n    Format = PolicyContentFormat.Xml\n};\n\nawait api.GetApiPolicy().CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    policyData);\n```\n\n### 6. Backup and Restore\n\n```csharp\n\u002F\u002F Backup\nvar backupParams = new ApiManagementServiceBackupRestoreContent(\n    storageAccount: \"mystorageaccount\",\n    containerName: \"apim-backups\",\n    backupName: \"backup-2024-01-15\")\n{\n    AccessType = StorageAccountAccessType.SystemAssignedManagedIdentity\n};\n\nawait service.BackupAsync(WaitUntil.Completed, backupParams);\n\n\u002F\u002F Restore\nawait service.RestoreAsync(WaitUntil.Completed, backupParams);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `ApiManagementServiceResource` | Represents an APIM service instance |\n| `ApiManagementServiceCollection` | Collection for service CRUD |\n| `ApiResource` | Represents an API |\n| `ApiManagementProductResource` | Represents a product |\n| `ApiManagementSubscriptionResource` | Represents a subscription |\n| `ApiManagementPolicyResource` | Service-level policy |\n| `ApiPolicyResource` | API-level policy |\n| `ApiManagementUserResource` | Represents a user |\n| `ApiManagementGroupResource` | Represents a group |\n| `ApiManagementBackendResource` | Represents a backend service |\n| `ApiManagementGatewayResource` | Represents a self-hosted gateway |\n\n## SKU Types\n\n| SKU | Purpose | Capacity |\n|-----|---------|----------|\n| `Developer` | Development\u002Ftesting (no SLA) | 1 |\n| `Basic` | Entry-level production | 1-2 |\n| `Standard` | Medium workloads | 1-4 |\n| `Premium` | High availability, multi-region | 1-12 per region |\n| `Consumption` | Serverless, pay-per-call | N\u002FA |\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** for long operations like service creation (30+ min)\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Navigate hierarchy** via `Get*` methods (e.g., `service.GetApis()`)\n7. **Policy format** — Use XML format for policies; JSON is also supported\n8. **Service creation** — Developer SKU is fastest for testing (~15-30 min)\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await serviceCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, serviceName, serviceData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Service already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Bad request: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Reference Files\n\n| File | When to Read |\n|------|--------------|\n| [references\u002Fservice-management.md](references\u002Fservice-management.md) | Service CRUD, SKUs, networking, backup\u002Frestore |\n| [references\u002Fapis-operations.md](references\u002Fapis-operations.md) | APIs, operations, schemas, versioning |\n| [references\u002Fproducts-subscriptions.md](references\u002Fproducts-subscriptions.md) | Products, subscriptions, access control |\n| [references\u002Fpolicies.md](references\u002Fpolicies.md) | Policy XML patterns, scopes, common policies |\n\n## Related Resources\n\n| Resource | Purpose |\n|----------|---------|\n| [API Management Documentation](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fapi-management\u002F) | Official Azure docs |\n| [Policy Reference](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fapi-management\u002Fapi-management-policies) | Complete policy reference |\n| [SDK Reference](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.apimanagement) | .NET API reference |\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fmicrosoft\u002Fskills\u002Fazure-mgmt-apimanagement-dotnet",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill azure-mgmt-apimanagement-dotnet",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill azure-mgmt-apimanagement-dotnet",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill azure-mgmt-apimanagement-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmicrosoft\u002Fskills\u002Fazure-mgmt-apimanagement-dotnet\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]