请告诉我注解 [DataType(DataType.Password)] 是什么意思?例如,如果我在视图中使用 @Html.Password 助手或者只是在助手处写入 textbox new { @type = "password" },那么当我在此字段中输入字符时,字符将显示为密码的星号安全。但是我试图在模型中的属性上放置一个带有密码类型的注释。没有这样的事情发生。那么这个注解有什么用呢?
请告诉我注解 [DataType(DataType.Password)] 是什么意思?例如,如果我在视图中使用 @Html.Password 助手或者只是在助手处写入 textbox new { @type = "password" },那么当我在此字段中输入字符时,字符将显示为密码的星号安全。但是我试图在模型中的属性上放置一个带有密码类型的注释。没有这样的事情发生。那么这个注解有什么用呢?
DataAnnotations
用于验证模型的字段,即如果是Password
,则可以通过注解指定,假设密码应该以大写字母开头,密码中的最小/最大字符数,可以指定密码应包含特殊字符。符号等。模型验证
例子:
密码数据注释
用于验证确认密码的数据注释
在使用 ASP.NET Identity 认证授权系统时,我们可能会遇到以下问题:输入密码时,会触发内置的验证逻辑,而我们无法使用标准的验证属性机制对这个逻辑进行任何更改。但是如果我们需要设置不同的最小密码长度等怎么办?尽管内置的验证逻辑对我们来说是隐藏的,但我们可以覆盖它。验证机制由 UserManager 类的 PasswordValidator 属性处理。它存储了一个我们可以修改的验证对象。
如果我们导航到文件
IdentityConfig.cs
夹中的文件App_Start
,那么在类定义中ApplicationUserManager
我们可以看到密码验证器的使用:在这里,内置类用于定义密码验证
PasswordValidator
,它具有以下属性:RequiredLength
:最小密码长度;RequireNonLetterOrDigit
:如果为真,则密码必须至少包含一个非字母数字字符;RequireDigit
:如果为真,则密码必须至少有一位;RequireLowercase
:如果为真,则密码必须至少包含一个小写字符;RequireUppercase
: 如果为真,则密码必须至少包含一个大写字符。对于大多数情况,这个功能就足够了,我们可以设置最小密码长度,输入字母、数字或非字母数字字符。但是,如果我们需要更复杂的验证逻辑,我们将不得不定义自己的验证器类。
验证器对象代表一个接口对象
IIdentityValidator
。在这种情况下,该类的实例被用作这样的对象PasswordValidator
,它设置最小密码长度和许多其他规则。但是,我们无法对这个验证器做任何其他事情。因此,要创建更复杂的验证逻辑,我们需要创建一个单独的类。因此,让我们创建以下类:
验证器类实现 IIdentityValidator 接口,该接口具有一个 ValidateAsync 方法。该方法接受一个字符串参数,取而代之的是正在验证的密码字符串将被传递到程序中。它可以执行以下检查:
然后在 ApplicationUserManager 类定义中我们也可以使用它:
为了将标有 [DataType(DataType.Password)] 注释的字段作为密码,并且在向该字段输入值时,值用星号标记,因为它应该在密码中,您需要使用EditorFor 助手,在链接的主题中有更详细的答案: https://stackoverflow.com/questions/6044922/model-does-not-apply-datatype-password