QueryStringExtension.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace SharedKernel.Extensions;
  5. public static class QueryStringExtension
  6. {
  7. public static string ToQueryString(this object obj)
  8. {
  9. if (obj is null)
  10. {
  11. return string.Empty;
  12. }
  13. var properties = obj.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => p.GetValue(obj) != null);
  14. var query = new StringBuilder('?');
  15. foreach (var prop in properties)
  16. {
  17. var value = prop.GetValue(obj);
  18. if (value is null)
  19. {
  20. continue;
  21. }
  22. if (query.Length > 1)
  23. {
  24. query.Append('&');
  25. }
  26. query.Append(Uri.EscapeDataString(prop.Name));
  27. query.Append('=');
  28. query.Append(Uri.EscapeDataString(value.ToString()!));
  29. query.Append("&");
  30. }
  31. return query.Length > 1 ? query.ToString().TrimEnd('&') : string.Empty;
  32. }
  33. }