[英]Asp.net Web api 6: Use ValidationAttribute for a unique userName
我这里没有太多代码但我想为不会有重复的用户名创建自己的验证。
Model:
[Table("User")]
public partial class User
{
[Key]
public Guid Id { get; set; } = Guid.NewGuid();
[Column("userName")]
[StringLength(200)]
[AllValidation(ErrorMessage = "foo")]
[Required(ErrorMessage = "Username is a required field")]
public string UserName { get; set; } = null!;
[StringLength(50, MinimumLength = 3, ErrorMessage = "The password should be between 3 characters to 50")]
[Required(ErrorMessage = "Password is a required field")]
public string Password { get; set; } = null!;
//[Column(TypeName = "date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}")]
public DateTime? LastLogin { get; set; }
public string? Token { get; set; }
}
验证属性:
public class AllValidationAttribute : ValidationAttribute
{
private readonly TalkBackDbContext _context;
public AllValidationAttribute(TalkBackDbContext context)
{
_context = context;
}
public override string FormatErrorMessage(string name)
{
return _context.Users.SingleOrDefault(x => x.UserName == name)!.ToString()!;
}
}
尝试将 ErrorMessage 插入属性时出现错误
这是错误:
你可以这样做。
从构造函数中删除它并覆盖 IsValid 方法。
public class AllValidationAttribute : ValidationAttribute
{
private string username;
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
var _context = (TalkBackDbContext )validationContext
.GetService(typeof(TalkBackDbContext ));
username = value.ToString();
if(!_context.Users.Any(cus => cus.UserName == value.ToString()))
{
return ValidationResult.Success;
}
else
{
return new ValidationResult
("Unique Name expected" + value.ToString());
}
}
public override string FormatErrorMessage(string name)
{
return "Expected Uniquename" + username;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.