[英]ASP.NET MVC Custom Validation with Threads
因此,我正在尋找對某些表單域進行自定義驗證的方法,並且需要一個解決方法。 驗證將連接到外部api提供程序,並檢查數據是否唯一。
這需要一些時間,因此我想在異步控制器(async,await)的幫助下在多個線程中創建驗證。
因此,當我單擊“提交”按鈕時,它會連接到3個不同的外部api並異步檢查數據。
最佳做法是什么? 還是應該只繼承繼承ValidationAttribute來創建customValidation?
謝謝。
您可以使用RemoteAttribute
。 此屬性通過在MVC控制器中調用動作來驗證輸入。
例如,我們驗證名稱是否唯一
public class SampleModel
{
[Remote("ValidateName" /*action*/, "Home" /*controller*/)]
public string Name { get; set; }
}
ValidateName操作
public class HomeController : Controller
{
public async Task<JsonResult> ValidateName(string name)
{
//the external validator
var externalValidators = new Func<string, Task<bool>>[]
{
ExternalValidator1,
ExternalValidator2,
ExternalValidator3
};
//execute each asynchronously and wait for all to finish
var externalValidatorTasks = externalValidators.Select(i => i(name)).ToArray();
await Task.WhenAll(externalValidatorTasks);
//return "invalid!" if any validation failed
if (externalValidatorTasks.Any(i => !i.Result))
{
return Json("invalid!", JsonRequestBehavior.AllowGet);
}
//name is valid
return Json(true, JsonRequestBehavior.AllowGet);
}
//mock external validation
public Task<bool> ExternalValidator1(string name)
{
return Task.FromResult(true);
}
}
您可以為此創建自定義數據驗證DataAnnotation。 在驗證屬性的服務器端部分,您可以調用外部API,而在客戶端部分(用js / jQuery編寫的驗證適配器)中,可以對外部API進行異步調用。
您可以檢查一下以供參考: http : //programersnotebook.blogspot.in/2013/03/customizing-validation-attributes-in-mvc.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.