C# 如何在.Net中验证Mongo对象ID
我遇到这样一种情况:一个方法需要接受一个ID,在Mongo中查找一个值,如果找不到,则调用另一个API来获取该项,前提是该项在本地数据库中不存在 我遇到的问题是集合的MongoID配置为ObjectID。当我试图查找无效id时,它抛出此异常:“不是有效的24位十六进制字符串”。其他API期望的ID的格式不同。在我寻找Mongo之前,有没有办法检查该id的有效性 我知道我可以将Mongo中的id更改为字符串,但为了与其他系列保持一致,我不希望这样做 集合的注册方式如下:C# 如何在.Net中验证Mongo对象ID,c#,mongodb,asp.net-core,.net-core,C#,Mongodb,Asp.net Core,.net Core,我遇到这样一种情况:一个方法需要接受一个ID,在Mongo中查找一个值,如果找不到,则调用另一个API来获取该项,前提是该项在本地数据库中不存在 我遇到的问题是集合的MongoID配置为ObjectID。当我试图查找无效id时,它抛出此异常:“不是有效的24位十六进制字符串”。其他API期望的ID的格式不同。在我寻找Mongo之前,有没有办法检查该id的有效性 我知道我可以将Mongo中的id更改为字符串,但为了与其他系列保持一致,我不希望这样做 集合的注册方式如下: BsonC
BsonClassMap.RegisterClassMap<Foo>(cm =>
{
cm.AutoMap();
cm.MapIdMember(f => f.id)
.SetIdGenerator(StringObjectIdGenerator.Instance)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我想我会添加一个答案,尽管在评论中已经讨论过了 你可以使用这个方法
var invalidObjId=“abc”;
if(目标类锥虫(无效类锥虫)
{
//我永远不会进入这里。
}
var validObjId=“5ebd7246d2b0d6003887a8f4”;
if(目标色氨酸(有效色氨酸)
{
//我们会到的。
}
您是否尝试过ObjectId.TryParse
?如果字符串可以是ObjectId,并且解析后的ObjectId作为out参数,则返回true。@ScottyD0nt谢谢,我错误地查看了这里,并认为该方法已被弃用。看起来它在这里仍然可用:解决了问题。谢谢
await collection.FindAsync(foo => foo.id == id);