所以我期望創建一些表單字段的自定義驗證,並需要一個想法如何解決這個問題。驗證將連接到外部API提供程序並檢查數據是否唯一。ASP.NET MVC線程自定義驗證
這需要一些時間,所以我想在異步控制器(異步,等待)的幫助下在多個線程中創建驗證。
所以當我點擊提交按鈕時,它連接到3個不同的外部apis並異步檢查數據。
這裏最好的做法是什麼?或者我應該只通過繼承ValidationAttribute創建customValidation?
謝謝。
所以我期望創建一些表單字段的自定義驗證,並需要一個想法如何解決這個問題。驗證將連接到外部API提供程序並檢查數據是否唯一。ASP.NET MVC線程自定義驗證
這需要一些時間,所以我想在異步控制器(異步,等待)的幫助下在多個線程中創建驗證。
所以當我點擊提交按鈕時,它連接到3個不同的外部apis並異步檢查數據。
這裏最好的做法是什麼?或者我應該只通過繼承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
所以從JavaScript或從控制器這個外部API調用? –
服務器端通過控制器 –