这是我的请求DTO注册:
public class RegistrationRequestDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Compare("Password")]
public string PasswordConfirmation { get; set; }
}
当我看到";[DataType(DataType.Password(]";,我希望框架检查密码是否符合Identity framework的规则。例如,在启动时,我有:
[...]
services
.AddIdentity<User, Role>(options =>
{
[...]
options.Password.RequireUppercase = true;
options.Password.RequireDigit = true;
options.Password.RequiredLength = 6;
options.Password.RequireLowercase = true;
})
[...]
所以我尝试使用";测试";作为密码,我应该有一个错误400调用API注册我的新用户。但是modelState.isValid始终等于true。
如何检查密码?
您只需要用以下内容装饰视图模型的属性:
[Remote(action: "ValidatePassword", controller: "MyValidationController", ErrorMessage = "Remote validation is working")]
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
然后在控制器(本例中名为"MyValidationController"(中创建一个操作(本例为"ValidatePassword"(,并在其中添加您的逻辑:
[AcceptVerbs("Get", "Post")]
public async Task<IActionResult> ValidatePassword(string password)
{
bool isvalid = true;
//
validationLogic
//
if (isvalid)
return Json(data: true);
else
return Json(data: false);
}
ref:RemoteAttribute