Graph API v5更新应用注册角色报错:需指定allowedMemberTypes
问题解决:Graph API v5更新应用角色时出现Request_BadRequest错误
问题原因
首次添加应用角色成功,但后续添加新角色时触发错误,核心原因是:
- 调用
GetAsync()获取现有应用对象时,默认返回的AppRole实例中部分必填属性(如AllowedMemberTypes)可能为null - 执行
PatchAsync()时,SDK会将整个AppRoles数组提交给服务器,包括这些属性缺失的现有角色 - Azure AD服务器验证时,认为现有角色的
AllowedMemberTypes未设置,从而抛出错误(错误信息中的默认Guid是SDK处理未正确初始化属性时生成的占位值)
解决方案
不要直接修改从服务器获取的完整Application对象,而是采用增量构建完整AppRoles数组的方式,确保每个角色的必填属性都完整赋值。
正确代码示例
// Create Graph Service Client using DefaultAzureCredential for my tenant. var graphClient = new GraphServiceClient( new DefaultAzureCredential(new DefaultAzureCredentialOptions { TenantId = "my_tenant_id", })); var appRegistrationObjectId = "object_id_my_app_registration"; var applicationClient = graphClient.Applications[appRegistrationObjectId]; // 1. 单独获取现有应用角色,确保获取所有必填字段 var existingAppRoles = await applicationClient.AppRoles.GetAsync().ConfigureAwait(false); // 2. 构建完整的角色列表:复制现有角色的所有必填属性,避免null值 var updatedAppRoles = existingAppRoles.Value.Select(role => new AppRole { Id = role.Id, Value = role.Value, DisplayName = role.DisplayName, Description = role.Description, AllowedMemberTypes = role.AllowedMemberTypes ?? new List<string>(), // 确保不为null IsEnabled = role.IsEnabled ?? true // 确保启用状态有值 }).ToList(); // 3. 添加新的应用角色 updatedAppRoles.Add(new AppRole { Id = Guid.NewGuid(), Value = "Dummy2", DisplayName = "Dummy display name 2", Description = "Description of this dummy app role 2", AllowedMemberTypes = new List<string> { "Application" }, IsEnabled = true, }); // 4. 仅提交包含AppRoles的增量更新对象 await applicationClient.PatchAsync(new Application { AppRoles = updatedAppRoles }).ConfigureAwait(false);
额外说明
- 若必须使用完整
Application对象进行更新,需在GetAsync()时显式指定要获取的所有必填字段,避免属性缺失:
var application = await applicationClient .GetAsync(requestConfig => { requestConfig.QueryParameters.Select = new[] { "appRoles(id,value,displayName,description,allowedMemberTypes,isEnabled)" }; }) .ConfigureAwait(false);
- Graph API的
Patch操作对于数组类型属性是全量替换,必须确保提交的数组中每个元素都包含所有必填属性,不能依赖服务器保留原有属性值。
内容的提问来源于stack exchange,提问作者DeMaki
相关产品推荐
相关产品推荐

