Skip to content

Commit 736f137

Browse files
committed
Fixed issue where exceptions in validators would unexpectedly be converted into AggregateException
1 parent 945cab4 commit 736f137

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22
<PropertyGroup>
33
<Nullable>enable</Nullable>
4-
<LangVersion>8.0</LangVersion>
4+
<LangVersion>9.0</LangVersion>
55
<NoWarn>NU1701</NoWarn>
66
<EmbedUntrackedSources>true</EmbedUntrackedSources>
77
<IncludeSymbols>true</IncludeSymbols>

FluentValidation.AutoValidation.Mvc/src/Validation/FluentValidationAutoValidationValidationVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ public override bool Validate(ModelMetadata? metadata, string? key, object? mode
3030
{
3131
// If built in model validation is disabled return true for later validation in the action filter.
3232
bool isBaseValid = disableBuiltInModelValidation || base.Validate(metadata, key, model, alwaysValidateAtTopLevel);
33-
return ValidateAsync(isBaseValid, key, model).Result;
33+
return Validate(isBaseValid, key, model);
3434
}
3535

3636
#if !NETCOREAPP3_1
3737
public override bool Validate(ModelMetadata? metadata, string? key, object? model, bool alwaysValidateAtTopLevel, object? container)
3838
{
3939
// If built in model validation is disabled return true for later validation in the action filter.
4040
bool isBaseValid = disableBuiltInModelValidation || base.Validate(metadata, key, model, alwaysValidateAtTopLevel, container);
41-
return ValidateAsync(isBaseValid, key, model).Result;
41+
return Validate(isBaseValid, key, model);
4242
}
4343
#endif
4444

45-
private async Task<bool> ValidateAsync(
45+
private bool Validate(
4646
bool defaultValue,
4747
string? key,
4848
object? model)
@@ -58,7 +58,7 @@ private async Task<bool> ValidateAsync(
5858
new Dictionary<string, object>(),
5959
null);
6060

61-
var validationResult = await FluentValidationHelper.ValidateWithFluentValidationAsync(
61+
var validationResult = FluentValidationHelper.ValidateWithFluentValidation(
6262
actionContext.HttpContext.RequestServices,
6363
model,
6464
actionExecutingContext);

FluentValidation.AutoValidation.Mvc/src/Validation/FluentValidationHelper.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,35 @@ namespace SharpGrip.FluentValidation.AutoValidation.Mvc.Validation
1111
{
1212
public static class FluentValidationHelper
1313
{
14+
public static ValidationResult? ValidateWithFluentValidation(
15+
IServiceProvider serviceProvider,
16+
object? model,
17+
ActionExecutingContext actionExecutingContext)
18+
{
19+
return ExecuteValidation(
20+
serviceProvider,
21+
model,
22+
actionExecutingContext,
23+
(validator, validationContext) => Task.FromResult(validator.Validate(validationContext))).GetAwaiter().GetResult();
24+
}
25+
1426
public static async Task<ValidationResult?> ValidateWithFluentValidationAsync(
1527
IServiceProvider serviceProvider,
1628
object? model,
1729
ActionExecutingContext actionExecutingContext)
30+
{
31+
return await ExecuteValidation(
32+
serviceProvider,
33+
model,
34+
actionExecutingContext,
35+
async (validator, validationContext) => await validator.ValidateAsync(validationContext, actionExecutingContext.HttpContext.RequestAborted));
36+
}
37+
38+
private static async Task<ValidationResult?> ExecuteValidation(
39+
IServiceProvider serviceProvider,
40+
object? model,
41+
ActionExecutingContext actionExecutingContext,
42+
Func<IValidator, IValidationContext, Task<ValidationResult?>> validationFunc)
1843
{
1944
if (model == null)
2045
{
@@ -52,7 +77,7 @@ public static class FluentValidationHelper
5277
validationContext = globalValidationInterceptor.BeforeValidation(actionExecutingContext, validationContext) ?? validationContext;
5378
}
5479

55-
var validationResult = await validator.ValidateAsync(validationContext, actionExecutingContext.HttpContext.RequestAborted);
80+
var validationResult = await validationFunc(validator, validationContext);
5681

5782
if (validatorInterceptor != null)
5883
{

0 commit comments

Comments
 (0)