using System; using System.Collections.Generic; using System.Text; namespace SharedKernel.Extensions { public static class QueryStringExtension { public static string ToQueryString(this object obj) { if (obj is null) { return string.Empty; } var properties = obj.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).Where(p => p.GetValue(obj) != null); var query = new StringBuilder('?'); foreach (var prop in properties) { var value = prop.GetValue(obj); if (value is null) { continue; } if (query.Length > 1) { query.Append('&'); } query.Append(Uri.EscapeDataString(prop.Name)); query.Append('='); query.Append(Uri.EscapeDataString(value.ToString()!)); query.Append("&"); } return query.Length > 1 ? query.ToString().TrimEnd('&') : string.Empty; } } }