2

MVC 3で流暢な検証を使用しています。コントローラーの特定のポストアクションに対して流暢な検証をオフにすることはできますか?

ありがとう

4

2 に答える 2

3

を使用してAttributedValidatorFactoryいて、POST動詞のホームコントローラーでのインデックスアクションの検証を無効にしたい場合は、カスタムバリデーターファクトリを作成できます。

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);
});

次に、ホームコントローラで次のアクションを実行する場合:

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

FluentValidationは起動しません。

于 2012-07-18T15:53:54.517 に答える
0

バリデーターのカスタマイズと呼ばれる流暢な検証の重要なポイントを見逃している干し草の男性。

ここで見つけるhttp://fluentvalidation.codeplex.com/wikipage?title=mvc

バリデーターのカスタマイズ

FluentValidation v3では、CustomizeValidatorAttributeを使用して、バリデーターの実行方法を構成できます。たとえば、バリデーターを特定のルールセットに対してのみ実行する場合は、検証されるパラメーターを指定することで、そのルールセット名を指定できます。

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

これ

于 2013-12-19T11:38:26.897 に答える