ValidateInputAttribute.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using Microsoft.AspNetCore.Mvc.ModelBinding;
  5. using Microsoft.Extensions.Logging;
  6. using System;
  7. using System.Linq;
  8. using System.Text;
  9. using ZhonTai.Common.Domain.Dto;
  10. namespace ZhonTai.Plate.Admin.HttpApi.Shared.Attributes
  11. {
  12. /// <summary>
  13. /// 输入模型验证
  14. /// </summary>
  15. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
  16. public class ValidateInputAttribute : ActionFilterAttribute
  17. {
  18. public override void OnResultExecuting(ResultExecutingContext context)
  19. {
  20. if (!context.ModelState.IsValid)
  21. {
  22. try
  23. {
  24. var logger = (ILogger<ValidateInputAttribute>)context.HttpContext.RequestServices.GetService(typeof(ILogger<ValidateInputAttribute>));
  25. var errors = context.ModelState
  26. .Where(m => m.Value.ValidationState == ModelValidationState.Invalid)
  27. .Select(m =>
  28. {
  29. var sb = new StringBuilder();
  30. sb.AppendFormat("{0}:", m.Key);
  31. sb.Append(m.Value.Errors.Select(n => n.ErrorMessage).Aggregate((x, y) => x + ";" + y));
  32. return sb.ToString();
  33. })
  34. .Aggregate((x, y) => x + "|" + y);
  35. logger.LogError(errors);
  36. context.Result = new JsonResult(ResponseOutput.NotOk(errors));
  37. }
  38. catch
  39. {
  40. context.Result = new StatusCodeResult(StatusCodes.Status500InternalServerError);
  41. }
  42. }
  43. }
  44. }
  45. }