namespace JNPF.Extras.CollectiveOAuth.Utils; /// /// 网址构造器. /// public class UrlBuilder { private Dictionary paramDic = new Dictionary(); private string baseUrl; /// /// 初始化一个类型的新实例. /// private UrlBuilder() { } /// /// 从基本路径. /// /// 基础路径. /// new {@code UrlBuilder} public static UrlBuilder fromBaseUrl(string baseUrl) { UrlBuilder builder = new UrlBuilder(); builder.baseUrl = baseUrl; return builder; } /// /// 添加参数. /// /// 参数名称. /// 参数值. /// this UrlBuilder. public UrlBuilder queryParam(string key, object value) { if (string.IsNullOrWhiteSpace(key)) { throw new Exception("参数名不能为空"); } string valueAsString = (value != null ? Convert.ToString(value) : null); this.paramDic.Add(key, valueAsString); return this; } /// /// 构造url. /// /// url. public string build() { return this.build(false); } /// /// 构造url. /// /// 转码. /// url. public string build(bool encode) { if (this.paramDic.Count == 0 || this.paramDic == null) { return this.baseUrl; } string baseUrl = this.appendIfNotContain(this.baseUrl, "?", "&"); string paramString = GlobalAuthUtil.parseMapToString(this.paramDic); return baseUrl + paramString; } /// /// 如果给定字符串{@code str}中不包含{@code appendStr},则在{@code str}后追加{@code appendStr}: /// 如果已包含{@code appendStr},则在{@code str}后追加{@code otherwise}. /// /// 给定的字符串. /// 需要追加的内容. /// 当{@code appendStr}不满足时追加到{@code str}后的内容. /// 追加后的字符串. public string appendIfNotContain(string str, string appendStr, string otherwise) { if (string.IsNullOrWhiteSpace(str) || string.IsNullOrWhiteSpace(appendStr)) { return str; } if (str.Contains(appendStr)) { return str + otherwise; } return str + appendStr; } }