所以我期望创建一些表单字段的自定义验证,并需要一个想法如何解决这个问题。验证将连接到外部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调用? –
服务器端通过控制器 –