流畅的验证 - MVC 3

时间:2012-07-18 15:27:49

标签: asp.net-mvc-3 fluentvalidation

我在MVC 3中使用了流畅的验证。是否可以关闭控制器中特定后期操作的流畅验证?

由于

2 个答案:

答案 0 :(得分:3)

假设您正在使用AttributedValidatorFactory,并且您想在POST动词的Home控制器上禁用Index操作的验证,您可以编写自定义验证器工厂:

public class MyAttributedValidatorFactory : AttributedValidatorFactory
{
    private readonly Func<HttpContextBase> _contextAccessor;
    public MyAttributedValidatorFactory(Func<HttpContextBase> contextAccessor)
    {
        _contextAccessor = contextAccessor;
    }

    public override IValidator GetValidator(Type type)
    {
        var context = _contextAccessor();
        var rd = context.Request.RequestContext.RouteData;
        var action = rd.GetRequiredString("action");
        var controller = rd.GetRequiredString("controller");

        if (string.Equals("post", context.Request.HttpMethod, StringComparison.OrdinalIgnoreCase) &&
            string.Equals("index", action, StringComparison.OrdinalIgnoreCase) && 
            string.Equals("home", controller, StringComparison.OrdinalIgnoreCase)
        )
        if (type == typeof(MyViewModel))
        {
            return null;
        }

        return base.GetValidator(type);
    }
}

将用于替换Application_Start中的默认值:

FluentValidationModelValidatorProvider.Configure(config =>
{
    Func<HttpContextBase> contextAccessor = 
        () => new HttpContextWrapper(HttpContext.Current);
    config.ValidatorFactory = new MyAttributedValidatorFactory(contextAccessor);
});

然后如果您在Home控制器上执行以下操作:

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    ...
}

FluentValidation不会启动。

答案 1 :(得分:0)

Hay,你已经错过了一些称为验证器定制的流畅验证的重点。

在这里找http://fluentvalidation.codeplex.com/wikipage?title=mvc

验证器定制

使用FluentValidation v3,您可以使用CustomizeValidatorAttribute配置验证程序的运行方式。例如,如果您希望验证程序仅针对特定规则集运行,则可以通过归因将要验证的参数来指定该规则集名称:

public ActionResult Save([CustomizeValidator(RuleSet="MyRuleset")] Customer cust) {
  // ...
}

这个

相关问题