簡體   English   中英

帶線程的ASP.NET MVC自定義驗證

[英]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.

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