创建用户分配托管标识时遇Microsoft.ManagedIdentity API版本错误求助
问题分析与解决办法
问题描述
创建用户分配托管标识时触发如下错误:
System.Exception: The resource type could not be found in the namespace 'Microsoft.ManagedIdentity' for api version '2022-01-31-PREVIEW'. ---> Microsoft.Rest.Azure.CloudException: The resource type could not be found in the namespace 'Microsoft.ManagedIdentity' for api version '2022-01-31-PREVIEW'.
使用的代码示例:
var resourceClient = new Azure.Management.ResourceManager.ResourceManagementClient(ClientCredential); resourceClient.SubscriptionId = SubscriptionId.ToString(); var result = resourceClient.Resources.CreateOrUpdateAsync(ResourceGroup.Name, "Microsoft.ManagedIdentity", "", "userAssignedIdentities", IdentityName, "2023-01-31", identity).GetResult();
解决步骤
1. 核对API版本的一致性
代码中指定的API版本是2023-01-31,但错误信息中出现的是2022-01-31-PREVIEW,说明实际请求使用的版本和代码声明不一致。
- 检查
identity对象属性,确保没有硬编码旧版API版本; - 替换API版本参数为Microsoft.ManagedIdentity当前支持的稳定版(如
2023-07-31,可通过Azure订阅的资源提供商页面查询最新稳定版本)。
2. 使用专用托管标识客户端替代通用资源客户端
通用ResourceManagementClient易出现资源类型与API版本匹配问题,推荐使用专门的ManagedIdentityClient:
- 安装NuGet包:
Azure.Management.ManagedIdentity - 替换代码为:
using Azure.Identity; using Azure.Management.ManagedIdentity; using Azure.Management.ManagedIdentity.Models; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var managedIdentityClient = new ManagedIdentityClient(credential) { SubscriptionId = SubscriptionId.ToString() }; var identityParams = new Identity(); var result = await managedIdentityClient.UserAssignedIdentities.CreateOrUpdateAsync( resourceGroupName: ResourceGroup.Name, resourceName: IdentityName, parameters: identityParams );
专用客户端会自动匹配正确的API版本和资源类型,避免手动参数错误。
3. 再次确认资源提供商注册状态
检查Microsoft.ManagedIdentity在目标订阅下的注册状态是否为Registered:
- 通过Azure CLI执行:
az provider show --namespace Microsoft.ManagedIdentity --query registrationState
- 若状态非Registered,执行注册命令:
az provider register --namespace Microsoft.ManagedIdentity
等待注册完成(约数分钟)后重试创建操作。
4. 验证资源类型参数的正确性
确认CreateOrUpdateAsync的参数取值和顺序无误:
resourceProviderNamespace必须为"Microsoft.ManagedIdentity"resourceType必须为"userAssignedIdentities"parentResourcePath为空字符串(用户分配托管标识是顶级资源,无父资源)
内容的提问来源于stack exchange,提问作者ranger
相关产品推荐
相关产品推荐

