You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC为何不验证密码,且邮箱验证也失效?

Email与Password字段服务器端验证失效问题排查与解决

我的服务器端代码未对Email字段进行验证,同时Password字段的配置规则也未生效,相关代码如下:

页面标记(.cshtml)

<label asp-for="Email"></label>
<input asp-for="Email" />
<span asp-validation-for="Email"></span>
<br />

<label asp-for="Password"></label>
<input asp-for="Password" />
<span asp-validation-for="Password"></span>
<br />

模型类代码

[Required]
[DataType(DataType.Password)]
public string? Password { get; set; }

[Required]
[EmailAddress]
public string? Email { get; set; }

Program.cs密码规则配置

builder.Services.Configure<IdentityOptions>(o => {
    o.Password.RequiredLength = 8;
    o.Password.RequireNonAlphanumeric = true;
    o.Password.RequireDigit = true;
    o.Password.RequireLowercase = true;
    o.Password.RequireUppercase = true;
});

尝试过添加[StringLength]数据注解,同样无效。

以下是使用Password的业务代码片段:

com.CommandText = "Insert into users (name, email, password) " +
                "Values (@name, @email, @password);";
            com.Parameters.AddWithValue("@name", acc.Name);
            var hashedpassword = helperMethods.HashPasword(acc.Password);
            com.Parameters.AddWithValue("@password", hashedpassword);

            dr.Close();
            com.ExecuteNonQuery();
            con.Close() ;

            return View("Views\Account\AccountCreated.cshtml");
        }

解决步骤

  1. 触发服务器端模型验证
    在处理请求的Action方法中,必须先检查ModelState.IsValid,验证不通过时返回视图,否则再执行数据库操作:

    [HttpPost]
    public IActionResult Register(YourAccountModel acc)
    {
        if (!ModelState.IsValid)
        {
            return View(acc);
        }
        // 后续数据库插入逻辑
    }
    

    模型上的[Required]、[EmailAddress]等注解仅在ModelState.IsValid检查时才会触发验证。

  2. Identity密码规则生效问题
    配置的IdentityOptions密码规则仅对ASP.NET Core Identity框架的UserManager生效。如果是手动编写SQL插入用户,需要手动验证密码规则:

    • 方式一:改用UserManager.CreateAsync创建用户,自动应用密码规则
    • 方式二:手动使用PasswordValidator验证:
      var passwordValidator = new PasswordValidator<IdentityUser>();
      var validationResult = await passwordValidator.ValidateAsync(userManager, null, acc.Password);
      if (!validationResult.Succeeded)
      {
          foreach (var error in validationResult.Errors)
          {
              ModelState.AddModelError("Password", error.Description);
          }
          return View(acc);
      }
      
  3. 排查[StringLength]失效问题
    确保[StringLength]注解正确应用在模型属性上,例如:

    [StringLength(100, MinimumLength = 8)]
    public string? Password { get; set; }
    

    同样需要配合ModelState.IsValid检查才能生效。

内容的提问来源于stack exchange,提问作者Adude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:05:31