【问题标题】:How to validate a Mongo ObjectId in .Net如何在 .Net 中验证 Mongo ObjectId
【发布时间】:2020-05-13 20:13:58
【问题描述】:

我有一个方法需要接受一个 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);
        });

查找(引发异常)如下所示:

await collection.FindAsync(foo => foo.id == id);

【问题讨论】:

标签: c# mongodb asp.net-core .net-core


【解决方案1】:

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

您可以使用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.
}

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2020-02-16
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多