微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#的自定义验证属性中使用异步方法

如何解决在C#的自定义验证属性中使用异步方法

我有一个异步方法,用于评估字段。

Task<bool> MyMethod(object obj);

我想创建一个使用上述方法自定义验证属性。 我的问题是ValidationAttribute不支持异步方法

我通常重写以下方法

ValidationResult IsValid (object? obj,ValidationContext validationContext);

但是我的异步方法输出Task<ValidationResult>,我不想使用同步方法

您有解决方案或建议吗?

提示:由于 I / O 阻止,我想使用异步方法。 (没有cpu绑定或繁重的操作。)

解决方法

您将必须选择,然后,如果ValidationAttribute不支持异步/等待调用,则您可能必须进行同步,否则您可能会在IsValid中调用异步方法,但是那样就不会了。 t阻止,您可能会得到错误的结果。

我看不到任何解决方法,因为您几乎需要立即知道某项有效或无效。这可能是ValidationAttribute无法识别它们的原因。

您可以修改模型而不是扩展模型,并具有一个isValidChecked事件或isInvalid事件,该事件从异步的详细信息更改中触发,然后在这些事件触发时执行某些操作。

,

在自定义验证属性中使用异步方法

验证管道不是异步的,因此无法用于此目的。参见this similar thread

众所周知,验证是关于确保类型和值正确性的,而不是诸如评估字段之类的业务规则。这应该在您的业务/数据层中强制执行,并且您可以尝试使用JQuery验证或Remote attribute

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。