Я новичок в основном веб-API asp.net. Я хочу сделать модуль объявлений для своего школьного проекта. Я хочу сделать так, чтобы администраторы могли отправлять объявления в зависимости от роли, целевого пользователя или целевого раздела. когда приходит запрос, он должен содержать хотя бы один ненулевой. Как я могу добиться этого в свойстве класса.
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; }
}
Я могу добиться этого в контроллере, но есть ли какой-либо метод, который я могу использовать, чтобы средство связывания модели отклоняло его, если три из них равны нулю.
learn.microsoft.com/en-us/aspnet/core/mvc/models/… - Learn.microsoft.com/en-us/dotnet/api/…
Судя по документации @Rand 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) });
}
}
}
Хотя мне лично не нравится делегировать ответственность за проверку данных контроллеру, главным образом потому, что это означает, что вы теряете бизнес-логику, если когда-либо отказываетесь от HTTP, а это означает, что у вас есть ТВЕРДОЕ нарушение (контроллеры выполняют HTTP-штуку И проверку данных, поэтому нет единой ответственности). ), я считаю, что это, вероятно, лучший ответ на данный момент. Ваше здоровье. Хорошая работа, @Tim-jarosz.
Вы можете создать конструктор для своей модели, который выполняет эту проверку, и если нулей больше, чем нужно, выдать исключение.