C# net 对url追加路径或设置Query参数
C# net url AppendPathSegments SetQueryParams
/// <summary> /// 追加路径片段(有更高要求可以使用Flurl库) /// </summary> /// <param name="url">地址,如 https://www.baidu.com</param> /// <param name="segments">路径片段</param> /// <returns>地址</returns> public static string AppendPathSegments(this string url, IEnumerable<object> segments) { string urlStr = url; foreach (var segment in segments) { var val = segment?.ToString(); if (string.IsNullOrWhiteSpace(val)) continue; if (urlStr.EndsWith("/")) urlStr = urlStr.Substring(0, urlStr.Length - 1); urlStr += val!.StartsWith("/") ? val : $"/{val}"; } return urlStr; } /// <summary> /// 设置Query参数(有更高要求可以使用Flurl库) /// </summary> /// <param name="url">地址,如 https://www.baidu.com/s</param> /// <param name="values">参数,支持字典和对象</param> /// <returns>地址</returns> public static string SetQueryParams(this string url, object? values) { string urlStr = url; if (values == null) return urlStr; List<string> kv = new List<string>(); if (values is IEnumerable jh) { if (jh is IDictionary dict) { foreach (DictionaryEntry item in dict) kv.Add($"{item.Key?.ToString()}={item.Value?.ToString()}"); } } else { foreach (var item in values.GetType().GetProperties()) { if (item.CanRead) kv.Add($"{item.Name}={item.GetValue(values)?.ToString()}"); } } if (kv.Any()) { if (!urlStr.EndsWith("?")) urlStr += "?"; urlStr += string.Join("&", kv); } return urlStr; }
使用方法:
//http://www.test.com/a/b/c/1?t1=v1&t2=2&t3=v3&t4=4 var url = "http://www.test.com/".AppendPathSegments(new object[] { "/a/", "b/", "c", 1 }) .SetQueryParams(new { t1 = "v1", t2 = 2 }) .SetQueryParams(new Dictionary<object, object>() { { "t3", "v3" }, { "t4", 4 } });
完成