使用.NET数据注释验证仅在API JSON主体中提供的字段



我正在从事.NET Core Web API项目,我有一些数据模型和实现的数据注释。

在更新用户配置文件时,用户可以在API JSON主体中输入所有字段或仅输入部分字段。

只有在API JSON中提供了特定字段时,我才能检查和应用数据注释。

注意:用户Id无法更新,仅供参考。

在下面的模型中,我有4个字段,只有用户Id必须在API JSON中提供,其余所有字段都可以在更新时在JSON中输入。

条件:

  • 如果API JSON中提供了任何字段,则该字段不应为NULL或空值

  • 如果除了user_id之外没有提供任何字段,它可以忽略并检查所提供字段的null注释。

我知道我们可以通过删除每列的Required()来进行验证,并手动进行验证。

示例:

JSON1

{
"user_id":"XYZ-123"
}

预期结果:由于未提供可选字段,因此应接受并通过验证

示例:

JSON2

{
"user_id":"XYZ-123",
"work_phone":"+91-987654320"
}

预期结果:由于只提供工作电话,因此应接受并通过验证

数据模型:

public class UserDetails
{
[Required(AllowEmptyStrings = false, ErrorMessage = "The user_id field is required.")]
[JsonProperty("user_id")]
public string? UserId{ get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "The home_phone field is required.")]
[JsonProperty("home_phone")]
public string? HomePhone { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "The work_phone field is required.")]
[JsonProperty("work_phone")]
public string? WorkPhone { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "The mobile_phone field is required.")]
[JsonProperty("mobile_phone")]
public string? MobilePhone { get; set; }
}

如果不去掉Required()属性,我认为这是不可能的。必需的是视图的数据注释。视图将要求它在接受表单帖子之前具有值。

如果你想在某些情况下成为必备品,你可以参考这篇文章。DrCopyPaste的答案使用的RequiredIf()属性可能会对您有所帮助。

相关内容

最新更新