QueryStringExtension.cs 1.2 KB

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