【发布时间】:2020-09-20 06:08:36
【问题描述】:
我想在 .NET Core 中创建一个名为 CheckIfEmailExists 的自定义验证属性。我想确保用户不在我的数据库中。所以这是我创建的用户视图模型:
public class CreateUserViewModel
{
public readonly UserManager userManager;
public CreateUserViewModel()
{
}
public ExtendedProfile ExtendedProfile { get; set; }
public User User { get; set; }
public int SchemeId { get; set; }
public SelectList Schemes { get; set; }
[Required]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CheckIfEmailExists()]
[Display(Name = "Email Address")]
public string Email { get; set; }
[DataType(DataType.EmailAddress)]
[Display(Name = "Confirm Email Address")]
public string ConfirmEmail { get; set; }
}
这是我的自定义验证:
public class CheckIfEmailExists : ValidationAttribute
{
private readonly UserManager _userManager;
public CheckIfEmailExists(UserManager userManager)
{
var _userManager = userManager;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var user = (User)validationContext.ObjectInstance;
var result = _userManager.FindByEmailAsync(user.Email).Result;
//do something
return ValidationResult.Success;
}
}
在我的电子邮件属性上添加自定义验证时出现错误,错误是我必须将 usermanager 对象传递给自定义类构造函数。
为什么我的应用不只注入对象本身?
有没有一种方法可以在我的自定义类中创建用户管理器对象而不耦合类?
我应该只在我的控制器中访问我的数据库吗?
【问题讨论】:
标签: asp.net-core validation dependency-injection asp.net-core-3.0