add validation filters

This commit is contained in:
2022-09-02 22:22:51 +01:00
parent dcf3b1020a
commit 0c3c991892
3 changed files with 69 additions and 5 deletions

View File

@@ -0,0 +1,43 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Diary.Shared
{
public class ValidationFilter : IAsyncActionFilter
{
public const string OverviewTitle = "The request is invalid.";
public const string OverviewMessage = "The request sent data that is not correct for the request.";
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
if (context.ModelState.IsValid)
{
await next();
}
else
{
ValidationExceptionDetails errorObj = new()
{
Title = OverviewTitle,
Message = OverviewMessage,
ModelState = GetErrors(context.ModelState)
};
context.Result = new BadRequestObjectResult(errorObj);
}
}
private static List<ValidationProblemDescriptor> GetErrors(ModelStateDictionary modelState)
{
List<ValidationProblemDescriptor> errors = new();
return modelState.Where(ms => ms.Value?.Errors.Count > 0)
.Select(x => new ValidationProblemDescriptor
{
Property = x.Key,
Errors = x.Value?.Errors.Select(e => e.ErrorMessage).ToArray()
})
.ToList();
}
}
}