繁体   English   中英

Asp.net Web api 6:对唯一的用户名使用 ValidationAttribute

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM