如何在 .Net 中验证 Mongo ObjectId

zaq*_*zaq 3 c# mongodb .net-core asp.net-core

我有一种情况,方法需要接受一个 ID,在 Mongo 中查找一个值,如果没有找到,则调用另一个 API 来获取该项目,前提是它不存在于本地数据库中。

我遇到的问题是集合的 MongoID 被配置为 ObjectID。当我尝试查找无效的 ID 时,它会抛出此异常:“不是有效的 24 位十六进制字符串”。其他 API 期望的 id 格式不同。有没有办法在查找之前检查 ID 对 Mongo 的有效性?

我知道我可以将 Mongo 中的 id 更改为字符串,但为了与我们的其他集合保持一致,我不想这样做。

该集合是这样注册的:

        BsonClassMap.RegisterClassMap<Foo>(cm =>
        {
            cm.AutoMap();
            cm.MapIdMember(f => f.id)
            .SetIdGenerator(StringObjectIdGenerator.Instance)
            .SetSerializer(new StringSerializer(BsonType.ObjectId))
            .SetIgnoreIfDefault(true);
        });
Run Code Online (Sandbox Code Playgroud)

查找(抛出异常)如下所示:

await collection.FindAsync(foo => foo.id == id);
Run Code Online (Sandbox Code Playgroud)

Kev*_*ith 6

我想我会添加一个答案,即使它已经在评论中讨论过。

您可以使用该ObjectId.TryParse方法。

var invalidObjId = "abc";

if(ObjectId.TryParse(invalidObjId, out _))
{
   // will never enter here.
}

var validObjId = "5ebd7246d2b0d6003887a8f4";

if(ObjectId.TryParse(validObjId, out _))
{
   // We will get here.
}
Run Code Online (Sandbox Code Playgroud)