Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

41 lines
1.3KB

  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Linq;
  4. using System.Text;
  5. using HealthMonitor.Util.Entities.Base;
  6. namespace HealthMonitor.WebApi.Controllers.Base
  7. {
  8. public class DefaultControllerBase<T> : ControllerBase where T: EntityBase
  9. {
  10. /// <summary>
  11. /// 验证参数有效性
  12. /// </summary>
  13. /// <param name="model">可选,若提供则在参数有效性不通过时,会给参数赋默认值</param>
  14. protected void AssertModelStateIsValid(T? model = null)
  15. {
  16. if (!ModelState.IsValid)
  17. {
  18. var message = new StringBuilder();
  19. var entityType = typeof(T);
  20. if (entityType.IsSubclassOf(typeof(HealthMonitorEntityBase))) message.Append("HealthMonitor");
  21. //else if (entityType.IsSubclassOf(typeof(TelpoCommonEntityBase))) message.Append("TelpoCommon");
  22. //else if (entityType.IsSubclassOf(typeof(GpsLocationHistoryEntityBase))) message.Append("GpsLocationHistory");
  23. message.Append($" [{entityType.FullName}], Error Message: ");
  24. foreach (var kv in ModelState)
  25. {
  26. if (kv.Value.ValidationState == Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid)
  27. {
  28. message.Append(string.Join(", ", kv.Value.Errors.Select(e => e.ErrorMessage)));
  29. }
  30. }
  31. if (model != null) model.AssertValidate();
  32. else throw new ArgumentException(message.ToString());
  33. }
  34. }
  35. }
  36. }