diff --git a/Directory.Build.props b/Directory.Build.props index 191ae85..ac14de8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -9,7 +9,7 @@ - 1.0.0 + 1.0.1 SharpGrip SharpGrip SharpGrip diff --git a/FluentValidation.AutoValidation.Mvc/src/Filters/FluentValidationAutoValidationActionFilter.cs b/FluentValidation.AutoValidation.Mvc/src/Filters/FluentValidationAutoValidationActionFilter.cs index bae96e5..333f7f5 100644 --- a/FluentValidation.AutoValidation.Mvc/src/Filters/FluentValidationAutoValidationActionFilter.cs +++ b/FluentValidation.AutoValidation.Mvc/src/Filters/FluentValidationAutoValidationActionFilter.cs @@ -40,24 +40,26 @@ public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionE foreach (var parameter in actionDescriptor.Parameters) { - var subject = context.ActionArguments[parameter.Name]; - var parameterType = parameter.ParameterType; + if (context.ActionArguments.TryGetValue(parameter.Name, out var subject)) + { + var parameterType = parameter.ParameterType; - // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract - var bindingSource = parameter.BindingInfo?.BindingSource; + // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract + var bindingSource = parameter.BindingInfo?.BindingSource; - // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract - if (subject != null && (bindingSource == BindingSource.Body || (bindingSource == BindingSource.Query && parameterType.IsClass))) - { - if (serviceProvider.GetValidator(parameterType) is IValidator validator) + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (subject != null && (bindingSource == BindingSource.Body || (bindingSource == BindingSource.Query && parameterType.IsClass))) { - var validationResult = await validator.ValidateAsync(new ValidationContext(subject), context.HttpContext.RequestAborted); - - if (!validationResult.IsValid) + if (serviceProvider.GetValidator(parameterType) is IValidator validator) { - foreach (var error in validationResult.Errors) + var validationResult = await validator.ValidateAsync(new ValidationContext(subject), context.HttpContext.RequestAborted); + + if (!validationResult.IsValid) { - context.ModelState.AddModelError(error.PropertyName, error.ErrorMessage); + foreach (var error in validationResult.Errors) + { + context.ModelState.AddModelError(error.PropertyName, error.ErrorMessage); + } } } } diff --git a/README.md b/README.md index 5c7e88c..8d063e8 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ their projects. ## Installation -Register your validators with the Microsoft DI service container, for instructions on settings that up please see https://docs.fluentvalidation.net/en/latest/di.html. +Register your validators with the Microsoft DI service container, for instructions on setting that up please see https://docs.fluentvalidation.net/en/latest/di.html. ### MVC controllers [![NuGet](https://img.shields.io/nuget/v/SharpGrip.FluentValidation.AutoValidation.Mvc)](https://www.nuget.org/packages/SharpGrip.FluentValidation.AutoValidation.Mvc)