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