Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

ModelValidationMiddleware.cs 1.1KB

123456789101112131415161718192021222324252627282930
  1. using Diligent.WebAPI.Contracts.DTOs.Error;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. namespace Diligent.WebAPI.Host.Middlewares
  5. {
  6. [ExcludeFromCodeCoverage]
  7. public class ModelValidationMiddleware : IActionFilter
  8. {
  9. public void OnActionExecuted(ActionExecutedContext context) { }
  10. public void OnActionExecuting(ActionExecutingContext context)
  11. {
  12. if (!context.ModelState.IsValid)
  13. {
  14. // create response model
  15. var response = new ErrorResponseDto("Invalid model")
  16. {
  17. // get model validation errors from ModelState
  18. ValidationItems = context.ModelState
  19. .Where(x => x.Value != null && x.Value.Errors.Count > 0)
  20. .Select(x => new ValidationItemDto { Key = x.Key, Value = x.Value?.Errors.Select(e => e.ErrorMessage).First() })
  21. .ToList()
  22. };
  23. // return validation model
  24. context.Result = new BadRequestObjectResult(response);
  25. }
  26. }
  27. }
  28. }