簡體   English   中英

在 C# 中的自定義驗證屬性中使用異步方法

[英]Use async method in custom validation attribute in c#

我有一個評估字段的異步方法

Task<bool> MyMethod(object obj);

我想創建一個使用上述方法的自定義驗證屬性 我的問題是ValidationAttribute類不支持異步方法。

我通常會覆蓋以下方法:

ValidationResult IsValid (object? obj, ValidationContext validationContext);

但是我的異步方法的輸出是Task<ValidationResult>並且我不想使用同步方法。

您有解決方案或建議嗎?

提示:由於I/O阻塞,我想使用 async 方法。 (沒有 CPU 限制或繁重的操作。)

您將不得不選擇,如果 ValidationAttribute 不支持 async/await 調用,那么您可能必須同步,否則您可以在 IsValid 中調用一個異步方法,但它不會阻止並且您可能會得到錯誤的結果。

我看不出有什么辦法可以解決這個問題,因為您幾乎需要立即知道某些內容是有效還是無效。 這可能是 ValidationAttribute 無法識別它們的原因。

你可以修改你的模型而不是擴展,並有一個 isValidChecked 事件或 isInvalid 事件,這些事件從異步細節的更改中觸發,然后在這些事件觸發時做一些事情。

在自定義驗證屬性中使用異步方法

驗證管道不是異步的,因此不可能用於此目的。 看到這個類似的線程

此外,眾所周知,驗證是關於確保類型和值的正確性,而不是諸如評估字段之類的業務規則。 這應該在您的業務/數據層中強制執行,您可以嘗試使用 JQuery 驗證或遠程屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM