UrlOper.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using System;
  2. using System.Text.RegularExpressions;
  3. using System.Web;
  4. using System.Collections.Specialized;
  5. namespace Ant.Service.Utilities
  6. {
  7. /// <summary>
  8. /// URL的操作类
  9. /// </summary>
  10. public class UrlOper
  11. {
  12. static System.Text.Encoding encoding = System.Text.Encoding.UTF8;
  13. #region URL的64位编码
  14. public static string Base64Encrypt(string sourthUrl)
  15. {
  16. string eurl = HttpUtility.UrlEncode(sourthUrl);
  17. eurl = Convert.ToBase64String(encoding.GetBytes(eurl));
  18. return eurl;
  19. }
  20. #endregion
  21. #region URL的64位解码
  22. public static string Base64Decrypt(string eStr)
  23. {
  24. if (!IsBase64(eStr))
  25. {
  26. return eStr;
  27. }
  28. byte[] buffer = Convert.FromBase64String(eStr);
  29. string sourthUrl = encoding.GetString(buffer);
  30. sourthUrl = HttpUtility.UrlDecode(sourthUrl);
  31. return sourthUrl;
  32. }
  33. /// <summary>
  34. /// 是否是Base64字符串
  35. /// </summary>
  36. /// <param name="eStr"></param>
  37. /// <returns></returns>
  38. public static bool IsBase64(string eStr)
  39. {
  40. if ((eStr.Length % 4) != 0)
  41. {
  42. return false;
  43. }
  44. if (!Regex.IsMatch(eStr, "^[A-Z0-9/+=]*$", RegexOptions.IgnoreCase))
  45. {
  46. return false;
  47. }
  48. return true;
  49. }
  50. #endregion
  51. /// <summary>
  52. /// 添加URL参数
  53. /// </summary>
  54. public static string AddParam(string url, string paramName, string value)
  55. {
  56. Uri uri = new Uri(url);
  57. if (string.IsNullOrEmpty(uri.Query))
  58. {
  59. string eval = HttpContext.Current.Server.UrlEncode(value);
  60. return String.Concat(url, "?" + paramName + "=" + eval);
  61. }
  62. else
  63. {
  64. string eval = HttpContext.Current.Server.UrlEncode(value);
  65. return String.Concat(url, "&" + paramName + "=" + eval);
  66. }
  67. }
  68. /// <summary>
  69. /// 更新URL参数
  70. /// </summary>
  71. public static string UpdateParam(string url, string paramName, string value)
  72. {
  73. string keyWord = paramName+"=";
  74. int index = url.IndexOf(keyWord)+keyWord.Length;
  75. int index1 = url.IndexOf("&", index);
  76. if (index1 == -1)
  77. {
  78. url = url.Remove(index, url.Length - index);
  79. url = string.Concat(url, value);
  80. return url;
  81. }
  82. url = url.Remove(index,index1 - index);
  83. url = url.Insert(index, value);
  84. return url;
  85. }
  86. #region 分析URL所属的域
  87. public static void GetDomain(string fromUrl, out string domain, out string subDomain)
  88. {
  89. domain = "";
  90. subDomain = "";
  91. try
  92. {
  93. if (fromUrl.IndexOf("的名片") > -1)
  94. {
  95. subDomain = fromUrl;
  96. domain = "名片";
  97. return;
  98. }
  99. UriBuilder builder = new UriBuilder(fromUrl);
  100. fromUrl = builder.ToString();
  101. Uri u = new Uri(fromUrl);
  102. if (u.IsWellFormedOriginalString())
  103. {
  104. if (u.IsFile)
  105. {
  106. subDomain = domain = "客户端本地文件路径";
  107. }
  108. else
  109. {
  110. string Authority = u.Authority;
  111. string[] ss = u.Authority.Split('.');
  112. if (ss.Length == 2)
  113. {
  114. Authority = "www." + Authority;
  115. }
  116. int index = Authority.IndexOf('.', 0);
  117. domain = Authority.Substring(index + 1, Authority.Length - index - 1).Replace("comhttp","com");
  118. subDomain = Authority.Replace("comhttp", "com");
  119. if (ss.Length < 2)
  120. {
  121. domain = "不明路径";
  122. subDomain = "不明路径";
  123. }
  124. }
  125. }
  126. else
  127. {
  128. if (u.IsFile)
  129. {
  130. subDomain = domain = "客户端本地文件路径";
  131. }
  132. else
  133. {
  134. subDomain = domain = "不明路径";
  135. }
  136. }
  137. }
  138. catch
  139. {
  140. subDomain = domain = "不明路径";
  141. }
  142. }
  143. /// <summary>
  144. /// 分析 url 字符串中的参数信息
  145. /// </summary>
  146. /// <param name="url">输入的 URL</param>
  147. /// <param name="baseUrl">输出 URL 的基础部分</param>
  148. /// <param name="nvc">输出分析后得到的 (参数名,参数值) 的集合</param>
  149. public static void ParseUrl(string url, out string baseUrl, out NameValueCollection nvc)
  150. {
  151. if (url == null)
  152. throw new ArgumentNullException("url");
  153. nvc = new NameValueCollection();
  154. baseUrl = "";
  155. if (url == "")
  156. return;
  157. int questionMarkIndex = url.IndexOf('?');
  158. if (questionMarkIndex == -1)
  159. {
  160. baseUrl = url;
  161. return;
  162. }
  163. baseUrl = url.Substring(0, questionMarkIndex);
  164. if (questionMarkIndex == url.Length - 1)
  165. return;
  166. string ps = url.Substring(questionMarkIndex + 1);
  167. // 开始分析参数对
  168. Regex re = new Regex(@"(^|&)?(\w+)=([^&]+)(&|$)?", RegexOptions.Compiled);
  169. MatchCollection mc = re.Matches(ps);
  170. foreach (Match m in mc)
  171. {
  172. nvc.Add(m.Result("$2").ToLower(), m.Result("$3"));
  173. }
  174. }
  175. #endregion
  176. }
  177. }