如何在C#的POST字段中仅传入JSON对象并存入MongoDB?
解决方法
方法一:直接修改Data字段类型
把object类型改成Dictionary<string, object>,这样只能接收键值对结构的JSON对象,字符串类型的请求会直接在模型绑定阶段失败,根本到不了存入MongoDB的环节。
修改后的模型类:
public class Products { [Required] public string Id { get; set; } [Required] public Dictionary<string, object> Data { get; set; } [Required] public bool Valid { get; set; } }
当请求里的Data是字符串时,ASP.NET Core的模型绑定会自动识别类型不匹配,返回400 Bad Request,不会执行后续的插入逻辑。
方法二:自定义验证属性(保留object类型的场景)
如果必须保留object类型,可以自定义一个验证属性,校验Data的值不是字符串类型。
先编写自定义验证类:
using System.ComponentModel.DataAnnotations; public class NotStringAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value is string) { return new ValidationResult("Data字段不能是字符串类型,必须是JSON对象"); } return ValidationResult.Success; } }
然后将这个属性加到Data字段上:
public class Products { [Required] public string Id { get; set; } [Required] [NotString] public object Data { get; set; } [Required] public bool Valid { get; set; } }
这样在模型校验阶段,如果Data是字符串,就会抛出验证错误,阻止数据存入MongoDB。
额外说明
如果使用MongoDB Driver,上述两种方法最终存入MongoDB的数据结构,都会和原本存储JSON对象的效果一致,不会影响后续的查询与使用。
内容的提问来源于stack exchange,提问作者Krypto456
相关产品推荐
相关产品推荐

