我是.net Core的新手,我有一个表格要求用户更改密码。我需要在后端检查验证。在这种情况下,前端发送3个参数(用户ID,密码,ConfirmedPWD)。 在类和控制器方面,后端需要什么?
我的Web应用程序是.Net Core 2.1 reactredux模板。
感谢任何帮助
验证:
*必须具有1个Alpha
*必须有1个数字
*最少8个,最多16
CustomPasswordValidator类别:
public class CustomPasswordValidator
{
public int RequiredLength { get; set; }
public CustomPasswordValidator(int length)
{
RequiredLength = length;
}
public Task<IdentityResult> ValidateAsync(string item)
{
if (String.IsNullOrEmpty(item) || item.Length < RequiredLength)
{
List<string> errors = new List<string>() { "Password should be of length {0}" };
return Task.FromResult(IdentityResult.Failed());
}
string pattern = @"^(?=.*[0-9])(?=.*[!@#$%^&*])[0-9a-zA-Z!@#$%^&*0-9]{10,}$";
if (!Regex.IsMatch(item, pattern))
{
return Task.FromResult(IdentityResult.Failed());
}
return Task.FromResult(IdentityResult.Success);
}
}
答案 0 :(得分:1)
我建议使用 FluentValidation 库,您可以在其中声明性地指定此类复杂方案。
Install-Package FluentValidation.AspNetCore
您的请求类别。
public class ChangePasswordRequest
{
public string UserId { get; set; }
public string Password { get; set; }
public string ConfirmedPWD { get; set; }
}
您可以使用流利的验证来创建自己的验证类。您还可以添加异常消息。
public class ChangePasswordRequestValidator : AbstractValidator<ChangePasswordRequest>
{
public ChangePasswordRequestValidator()
{
RuleFor(x => x.Password).Password();
}
}
public static class RuleBuilderExtensions
{
public static IRuleBuilder<T, string> Password<T>(this IRuleBuilder<T, string> ruleBuilder)
{
var options = ruleBuilder
.NotEmpty()
.NotNull()
.MinimumLength(8)
.MaximumLength(16)
.Matches("^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$").WithMessage("regex error");
return options;
}
}
某些配置...
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddFluentValidation(fvc =>
fvc.RegisterValidatorsFromAssemblyContaining<Startup>());
}
最后,您可以使用 ModelState.IsValid
检查模型 [HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
答案 1 :(得分:1)
当您使用.net core时,不必像下面那样显式检查ModelState
[HttpPost]
public async Task<IActionResult> ChangePassword([FromBody] ChangePasswordRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
return Ok();
}
控制器上的[ApiController]批注将自动为您执行模型状态验证。仔细阅读并使用它。