如何解决如何验证ASP.NET Core Web API中必须具有2个字段中的1个?
我正在使用ASP.NET Core 5,.NET 5版本5.0.100-rc.1.20452.10
。我有一个模型需要验证
/// <summary>
/// Model của form dùng khi admin thêm mới người dùng từ giao diện quản trị.
/// </summary>
public class AddUserForm
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string Password { get; set; }
public string About { get; set; }
public string Fullname { get; set; }
public string AliasName { get; set; }
public string SecondMobile { get; set; }
public string PhoneNumber { get; set; }
[DataType(DataType.Upload)]
public IFormFile file { get; set; }
}
验证规则必须具有(必填)2个字段中的1个:About
或AliasName
。意思是
-
有
About
,没有AliasName
,没关系。 -
没有
About
,有AliasName
,还可以。 -
有
About
,有AliasName
,没关系。 -
否
About
,否AliasName
,那不行。
控制器
/// <summary>
/// Admin Thêm mới người dùng từ giao diện quản trị.
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult<string>> AddUser([FromForm] AddUserForm form)
{
if (ModelState.IsValid)
{
ApplicationUser user = new ApplicationUser();
// https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.createasync?view=aspnetcore-3.1
// user.PasswordHash = HashPassword()
if (String.IsNullOrEmpty(form.Email))
{
user.Email = form.Email;
}
user.EmailConfirmed = true;
if (String.IsNullOrEmpty(form.Email))
{
user.NormalizedEmail = form.Email.ToUpper();
}
if (String.IsNullOrEmpty(form.About))
{
user.About = form.About;
}
if (String.IsNullOrEmpty(form.AliasName))
{
user.AliasName = form.AliasName;
}
if (String.IsNullOrEmpty(form.Fullname))
{
user.Fullname = form.Fullname;
}
if (String.IsNullOrEmpty(form.PhoneNumber))
{
user.PhoneNumber = form.PhoneNumber;
}
if (String.IsNullOrEmpty(form.SecondMobile))
{
user.SecondMobile = form.SecondMobile;
}
if (String.IsNullOrEmpty(form.Email))
{
user.UserName = form.Email;
}
//FIXME: Chưa có phần thêm avatar.
if (form.file != null)
{
// Ghi file. Làm tương tự khi thêm Asset.
if (IsImageFile(form.file))
{
string imgPath = await WriteFile(form.file);
user.Avatar = imgPath;
}
else
{
return BadRequest(new { message = "Invalid file extension" });
}
}
string pass = form.Password;
user.Created = DateTime.Now;
user.Modified = DateTime.Now;
await _userManger.CreateAsync(user,pass);
await _db.SaveChangesAsync();
return Ok(user);
}
else
{
return BadRequest(ModelState);
}
}
如何实现此验证规则,我更喜欢使用注释。
解决方法
尝试使用以下代码创建自定义验证方法:
Products
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。