如何使用C#和.NET移除Redis缓存的用户分配托管标识(报错解决)
解决Redis缓存移除所有用户分配托管标识失败的问题
要将Redis缓存从托管身份认证切换回连接字符串认证,彻底移除所有用户分配的托管标识,你需要修改代码中身份类型的设置:
- 将
ManagedServiceIdentityType从UserAssigned改为None——因为当身份类型为UserAssigned时,Azure要求必须至少保留一个用户分配标识,不允许全部移除;只有将类型设为None,才能清空所有关联的用户分配身份。
修正后的代码如下:
// 创建类型为None的托管身份配置,彻底移除所有托管身份关联 ManagedServiceIdentity managedIdentity = new ManagedServiceIdentity(ManagedServiceIdentityType.None); RedisPatch patch = new RedisPatch() { Identity = managedIdentity }; RedisResource resource = redisCollection.GetAsync(clusterName).GetAwaiter().GetResult(); resource.UpdateAsync(WaitUntil.Completed, patch).GetAwaiter().GetResult();
另外注意:原代码中使用GetResult()可能会导致死锁问题,建议改用GetAwaiter().GetResult(),这是更安全的同步调用异步方法的方式。
错误分析:你遇到的
BadRequest错误核心原因是,当身份类型指定为UserAssigned时,Azure Redis服务不允许移除所有用户分配标识,必须至少保留一个;只有将身份类型切换为None,才允许完全清空托管身份配置,从而切换回连接字符串认证。
内容的提问来源于stack exchange,提问作者ranger
相关产品推荐
相关产品推荐

