ASP.NET Web API 6:使用验证归因于唯一用户名

发布于 2025-02-12 05:01:19 字数 1387 浏览 0 评论 0原文

我在这里没有太多代码 但是,我想为用户名创建自己的验证,而这些用户名不会重复。

模型:

[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; }
}

验证attribute:

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插入属性中时,我会遇到错误,

这是错误:

I do not have much code here
But I want to create my own validation for username that will not have duplicates.

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; }
}

ValidationAttribute:

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()!;
    }
}

I get an error when I try to insert ErrorMessage into an attribute

this is the error:

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃素的狼 2025-02-19 05:01:19

你可以做到这一点。

将其从构造函数和覆盖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;
       }
   }

    

you can do this.

remove it from constructor and override IsValid method.

    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;
       }
   }

    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文