如何在 MVC 控制器中通过 DI 以通用方式使用 FluentValidation
How to use FluentValidation in a generic way with DI in MVC controllers
我实施了流畅的验证规则。我正在通过 angular 请求以 json 格式向我的控制器 api 端点发送请求。
当我收到数据并填充模型参数时,我想使用流畅的验证来验证发送的数据。
[Route("")]
[HttpPost]
public async Task<IActionResult> Post([FromBody]TesViewModel request)
{
var validator = new TesViewModelValidator();
var result = await validator.ValidateAsync(request);
return Ok();
}
如何使用依赖注入以通用方式实例化和访问对象并传递正确的请求?
创建基础抽象 class:
public abstract class BaseApiRequest
{
}
用这个抽象继承你的模型class
public class YourModel : BaseApiRequest
{
}
之后创建一个扩展方法:
public static bool IsValidApiRequest<T>(this T entity)
where T : BaseApiRequest
{
var attribute = (ValidatorAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(ValidatorAttribute));
if (attribute != null)
{
if (entity == null)
return false;
var validator = attribute.ValidatorType;
var instance = Activator.CreateInstance(validator);
MethodInfo method = instance.GetType().GetMethod("Validate", new[] { typeof(T) });
object result = method.Invoke(instance, new object[] { entity });
return (bool)result.GetType().GetProperty("IsValid").GetValue(result); ;
}
return true;
}
现在,您可以使用以下方式验证您的请求:
if (!request.IsValidApiRequest())
return BadRequest();
我最终使用注入 IValidator 实例并调用它:
var result = _validator.Validate(实例);其中实例是已注册的 AbstractValidator
的 T
我实施了流畅的验证规则。我正在通过 angular 请求以 json 格式向我的控制器 api 端点发送请求。
当我收到数据并填充模型参数时,我想使用流畅的验证来验证发送的数据。
[Route("")]
[HttpPost]
public async Task<IActionResult> Post([FromBody]TesViewModel request)
{
var validator = new TesViewModelValidator();
var result = await validator.ValidateAsync(request);
return Ok();
}
如何使用依赖注入以通用方式实例化和访问对象并传递正确的请求?
创建基础抽象 class:
public abstract class BaseApiRequest
{
}
用这个抽象继承你的模型class
public class YourModel : BaseApiRequest
{
}
之后创建一个扩展方法:
public static bool IsValidApiRequest<T>(this T entity)
where T : BaseApiRequest
{
var attribute = (ValidatorAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(ValidatorAttribute));
if (attribute != null)
{
if (entity == null)
return false;
var validator = attribute.ValidatorType;
var instance = Activator.CreateInstance(validator);
MethodInfo method = instance.GetType().GetMethod("Validate", new[] { typeof(T) });
object result = method.Invoke(instance, new object[] { entity });
return (bool)result.GetType().GetProperty("IsValid").GetValue(result); ;
}
return true;
}
现在,您可以使用以下方式验证您的请求:
if (!request.IsValidApiRequest())
return BadRequest();
我最终使用注入 IValidator 实例并调用它: var result = _validator.Validate(实例);其中实例是已注册的 AbstractValidator
的 T