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;
}
}