add validation filters
This commit is contained in:
43
Shared/ValidationFilter.cs
Normal file
43
Shared/ValidationFilter.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user