Azure Cosmos DB .NET v3调用CreateItemAsync无法自动生成id如何解决
你收到的The input name 'null' is invalid报错,核心原因是提交的实体数据中显式包含了值为null的id字段,Cosmos DB服务端不允许id为null值,同时.NET v3 SDK仅会在请求完全没有携带id字段时才会自动生成id,不会主动覆盖显式传入的null id。
解决方法
方法1:调整Id属性的序列化规则
修改实体类的Id属性注解,配置序列化时忽略null值,这样当Id为null时,最终提交给服务端的JSON不会包含id字段,触发SDK自动生成逻辑:
using Newtonsoft.Json; public class YourEntity { // 配置null值序列化时忽略该字段 [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] public string Id { get; set; } // 其余属性保持原有写法 public string Url { get; set; } public string CustomerId { get; set; } // ... 其他属性省略 }
方法2:调整CosmosClient全局序列化配置
如果你需要全局忽略null值序列化,可以在初始化CosmosClient时统一配置,不需要单独给每个实体的Id加注解:
using Microsoft.Azure.Cosmos; var cosmosClient = new CosmosClient("你的连接字符串", new CosmosClientOptions { SerializerOptions = new CosmosSerializationOptions { // 全局忽略null值字段的序列化 IgnoreNullValues = true, // 其余原有配置保持不变 PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase // 如果你之前用了驼峰命名就保留 } });
配置完成后,创建实体实例时不要给Id属性赋值(保持默认的null值即可),直接调用CreateItemAsync插入,SDK会自动生成GUID格式的id写入服务端,不需要手动赋值。
内容的提问来源于stack exchange,提问作者chiaDev
相关产品推荐
相关产品推荐

