在.Net Core中,如何在进入控制器操作之前验证密码



这是我的请求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

相关内容

  • 没有找到相关文章

最新更新