using System; using System.Collections.Generic; using System.Text; namespace MAX.Core.Helpers; public class UriHelper { #region 对外公开方法 /// /// 带有前缀的域名 /// /// /// public static string GetSchemeDomain(string url) { Uri uri = new(url); return $"{uri.Scheme}://{uri.Authority}"; } /// /// 获取域名 /// /// /// public static string GetDomain(string url) { Uri uri = new(url); return uri.Host; } /// /// 获取 URL /// /// URL 地址 /// public static string GetUrl(string url) { Uri uri = new(url); return uri.AbsolutePath; } /// /// URL 解码 /// /// URL 地址 /// public static string UrlDecode(string url) { return System.Web.HttpUtility.UrlDecode(url); } /// /// URL 解码 /// /// URL 地址 /// 编码格式 /// public static string UrlDecode(string url, Encoding encoding) { return System.Web.HttpUtility.UrlDecode(url, encoding); } /// /// URL 编码 /// /// URL 地址 /// public static string UrlEncode(string url) { return System.Web.HttpUtility.UrlEncode(url); } /// /// URL 编码 /// /// URL 地址 /// 编码格式 /// public static string UrlEncode(string url, Encoding encoding) { return System.Web.HttpUtility.UrlEncode(url, encoding); } /// /// 获取参数列表 /// /// Url 地址 /// public static List GetQueryList(string url) { return GetQueryList(url, Encoding.UTF8); } /// /// 获取参数列表 /// /// Url 地址 /// 编码格式 /// public static List GetQueryList(string url, Encoding encoding) { Uri uri = new(url); string query = uri.PathAndQuery; if (query.IndexOf(".") > 0) { query = query.Substring(0, query.IndexOf(".")); } List dataList = []; string[] queryDataList = query.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); if (queryDataList != null && queryDataList.Length > 0) { foreach (string queryData in queryDataList) { dataList.Add(System.Web.HttpUtility.UrlDecode(queryData, encoding)); } } return dataList; } /// /// 获取参数字典 /// /// Url 地址 /// public static Dictionary GetQueryDict(string url) { return GetQueryDict(url, Encoding.UTF8); } /// /// 获取参数字典 /// /// Url 地址 /// 编码格式 /// public static Dictionary GetQueryDict(string url, Encoding encoding) { Uri uri = new(url); string query = uri.Query.TrimStart(new char[] { '?' }); Dictionary dataDict = []; string[] queryDataList = query.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries); if (queryDataList != null && queryDataList.Length > 0) { foreach (string queryData in queryDataList) { string[] keyValue = queryData.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (!dataDict.ContainsKey(keyValue[0])) { dataDict.Add(keyValue[0].ToLower(), System.Web.HttpUtility.UrlDecode(keyValue[1], encoding)); } } } return dataDict; } #endregion }