gpt4 book ai didi

c# - 通过配置使用验证应用程序 block 时未调用自定义验证器

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:33 24 4
gpt4 key购买 nike

我在我的配置文件中设置了一个规则集,它有两个验证器,一个是内置的 NotNullValidator,另一个是自定义验证器。问题是我看到 NotNullValidator 命中,但没有看到我的自定义验证器。

自定义验证器用于验证 Entity Framework 实体对象。

我已经使用调试器确认 NotNull 被命中(我强行设置了一个失败条件,所以我看到它设置了一个无效结果),但它从未进入自定义结果。

我使用 MVC 作为 Web 应用程序,因此我在该层的配置文件中定义了规则集,但我的自定义验证器是在另一个项目中定义的。但是,我不认为这是一个问题,因为当我在 Visual Studio 2008 中使用企业库配置工具时,它能够为自定义验证器正确设置类型。同样,我相信自定义验证器很好,因为它构建正常,并且配置工具可以正确引用它。

有没有人知道问题可能是什么,或者甚至应该做什么/尝试进一步调试?

这是我的自定义验证器的精简版:

[ConfigurationElementType(typeof(CustomValidatorData))]
public sealed class UserAccountValidator : Validator
{
public UserAccountValidator(NameValueCollection attributes)
: base(string.Empty, "User Account")
{
}

protected override string DefaultMessageTemplate
{
get { throw new NotImplementedException(); }
}

protected override void DoValidate(object objectToValidate,
object currentTarget, string key, ValidationResults results)
{

if (!currentTarget.GetType().Equals(typeof(UserAccount)))
{
throw new Exception();
}

UserAccount userAccountToValidate = (UserAccount)currentTarget;

// snipped code ...

this.LogValidationResult(results,
"The User Account is invalid", currentTarget, key);
}
}

这是我在 Validation.config 中的规则集的 XML(NotNull 规则只是为了强制失败所以我可以看到它被击中,它确实如此):

<validation>
<type defaultRuleset="default" assemblyName="MyProj.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
name="MyProj.Entities.UserAccount">
<ruleset name="default">
<properties>
<property name="HashedPassword">
<validator negated="true" messageTemplate="" messageTemplateResourceName=""
messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Not Null Validator" />
</property>
<property name="Property">
<validator messageTemplate="" messageTemplateResourceName=""
messageTemplateResourceType="" tag="" type="MyProj.Entities.UserAccountValidator, MyProj.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
name="Custom Validator" />
</property>
</properties>
</ruleset>
</type>
</validation>

下面是我调用验证方式的简化版本:

                var type = entity.GetType()
var validator = ValidationFactory.CreateValidator(type, "default", new FileConfigurationSource("Validation.config"))
var results = validator.Validate(entity)

如有任何建议,我们将不胜感激!

谢谢,

克里斯

最佳答案

您的自定义验证器不应配置为“属性验证器”,而应配置为“ self 验证器”。将节点向上移动到配置中节点的正下方。这应该可以解决问题。

关于c# - 通过配置使用验证应用程序 block 时未调用自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2022155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com