diff --git a/docs/en/Validation.md b/docs/en/Validation.md index 15c3f134124..c4821adf657 100644 --- a/docs/en/Validation.md +++ b/docs/en/Validation.md @@ -112,6 +112,29 @@ namespace Acme.BookStore > ABP framework uses the [dynamic proxying / interception](Dynamic-Proxying-Interceptors.md) system to perform the validation. In order to make it working, your method should be **virtual** or your service should be injected and used over an **interface** (like `IMyService`). +#### Enabling/Disabling Validation + +You can use the `[DisableValidation]` to disable it for methods, classs and properties. + +````csharp +[DisableValidation] +public Void MyMethod() +{ +} + +[DisableValidation] +public class InputClass +{ + public string MyProperty { get; set; } +} + +public class InputClass +{ + [DisableValidation] + public string MyProperty { get; set; } +} +```` + ### AbpValidationException Once ABP determines a validation error, it throws an exception of type `AbpValidationException`. Your application code can throw `AbpValidationException`, but most of the times it is not needed. @@ -155,4 +178,4 @@ public class MyObjectValidationContributor ## FluentValidation Integration -Volo.Abp.FluentValidation package integrates the FluentValidation library to the validation system (by implementing the `IObjectValidationContributor`). See the [FluentValidation Integration document](FluentValidation.md) for more. \ No newline at end of file +Volo.Abp.FluentValidation package integrates the FluentValidation library to the validation system (by implementing the `IObjectValidationContributor`). See the [FluentValidation Integration document](FluentValidation.md) for more. diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs index 797721bea3b..25b59fbbcfe 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs @@ -45,12 +45,18 @@ protected virtual void ValidateObjectRecursively(List errors, AddErrors(errors, validatingObject); //Validate items of enumerable - if (validatingObject is IEnumerable) + if (validatingObject is IEnumerable enumerable) { - if (!(validatingObject is IQueryable)) + if (!(enumerable is IQueryable)) { - foreach (var item in (validatingObject as IEnumerable)) + foreach (var item in enumerable) { + //Do not recursively validate for primitive objects + if (TypeHelper.IsPrimitiveExtended(item.GetType())) + { + break; + } + ValidateObjectRecursively(errors, item, currentDepth + 1); } } @@ -124,4 +130,4 @@ protected virtual void AddPropertyErrors(object validatingObject, PropertyDescri } } } -} \ No newline at end of file +}