asp.net 如何在C#中使三个属性中只有两个可以为空

6jjcrrmo  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(144)

我是www.example.com的asp.net核心网页API的新手。我想为我的学校项目做一个公告模块。我想做的是管理员可以根据角色或目标用户或目标部分发送公告。当请求到来时,它必须包含至少一个非空值,我如何在类属性中实现这一点。

public class Announcement
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Detail { get; set; }
        public DateTime Date { get; set; }
        public string? Attachment { get; set; }
        public AppUser Poster { get; set; }
        public string PosterUserId { get; set; }
        public AppUser? Receiver { get; set; }
        public string? ReceiverUserId { get; set; }
        public Section? Section { get; set; }
        public int? SectionId { get; set; }
        public IdentityRole? Role { get; set; }
        public string? RoleId { get; set; }
    }

我可以在控制器中实现这一点,但是,有没有什么方法可以让模型绑定器在其中三个为空时拒绝它?

h9a6wy2h

h9a6wy2h1#

参考文档@兰德Random的链接。你想让你的类成为一个IValidatableObject,然后实现Validate方法。类似于:

public class Announcement : IValidatableObject
{
...

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (IdentityRole == null && Section == null && Receiver == null)
        {
            yield return new ValidationResult(
                $"You must have at least one field of Role, Target User, or Target Section selected.",
                new[] { nameof(IdentityRole), nameof(Section), nameof(Receiver) });
        }
    }
}
klh5stk1

klh5stk12#

你只需要在你的dto类或model类中声明

public string Title { get; set; } = string.Empty;

相关问题