C#自定义针对URL地址的处理类实例
本文实例讲述了C#自定义针对URL地址的处理类。分享给大家供大家参考。具体分析如下:
这个C#类是专门针对URL网址处理的类,可以对URL地址进行Base64的加密和解密,可以通过函数的方式向URL添加参数,可以更新URL中已有参数的值,分析URL地址的域名、子域名,分析URL的所有参数和参数值,功能非常全面,还可以自己扩充,非常具有实用价值
usingSystem; usingSystem.Text.RegularExpressions; usingSystem.Web; usingSystem.Collections.Specialized; namespaceDotNet.Utilities { ///<summary> ///URL的操作类 ///</summary> publicclassUrlOper { staticSystem.Text.Encodingencoding=System.Text.Encoding.UTF8; #regionURL的64位编码 publicstaticstringBase64Encrypt(stringsourthUrl) { stringeurl=HttpUtility.UrlEncode(sourthUrl); eurl=Convert.ToBase64String(encoding.GetBytes(eurl)); returneurl; } #endregion #regionURL的64位解码 publicstaticstringBase64Decrypt(stringeStr) { if(!IsBase64(eStr)) { returneStr; } byte[]buffer=Convert.FromBase64String(eStr); stringsourthUrl=encoding.GetString(buffer); sourthUrl=HttpUtility.UrlDecode(sourthUrl); returnsourthUrl; } ///<summary> ///是否是Base64字符串 ///</summary> ///<paramname="eStr"></param> ///<returns></returns> publicstaticboolIsBase64(stringeStr) { if((eStr.Length%4)!=0) { returnfalse; } if(!Regex.IsMatch(eStr,"^[A-Z0-9/+=]*$",RegexOptions.IgnoreCase)) { returnfalse; } returntrue; } #endregion ///<summary> ///添加URL参数 ///</summary> publicstaticstringAddParam(stringurl,stringparamName,stringvalue) { Uriuri=newUri(url); if(string.IsNullOrEmpty(uri.Query)) { stringeval=HttpContext.Current.Server.UrlEncode(value); returnString.Concat(url,"?"+paramName+"="+eval); } else { stringeval=HttpContext.Current.Server.UrlEncode(value); returnString.Concat(url,"&"+paramName+"="+eval); } } ///<summary> ///更新URL参数 ///</summary> publicstaticstringUpdateParam(stringurl,stringparamName,stringvalue) { stringkeyWord=paramName+"="; intindex=url.IndexOf(keyWord)+keyWord.Length; intindex1=url.IndexOf("&",index); if(index1==-1) { url=url.Remove(index,url.Length-index); url=string.Concat(url,value); returnurl; } url=url.Remove(index,index1-index); url=url.Insert(index,value); returnurl; } #region分析URL所属的域 publicstaticvoidGetDomain(stringfromUrl,outstringdomain,outstringsubDomain) { domain=""; subDomain=""; try { if(fromUrl.IndexOf("的名片")>-1) { subDomain=fromUrl; domain="名片"; return; } UriBuilderbuilder=newUriBuilder(fromUrl); fromUrl=builder.ToString(); Uriu=newUri(fromUrl); if(u.IsWellFormedOriginalString()) { if(u.IsFile) { subDomain=domain="客户端本地文件路径"; } else { stringAuthority=u.Authority; string[]ss=u.Authority.Split('.'); if(ss.Length==2) { Authority="www."+Authority; } intindex=Authority.IndexOf('.',0); domain=Authority.Substring(index+1,Authority.Length-index-1).Replace("comhttp","com"); subDomain=Authority.Replace("comhttp","com"); if(ss.Length<2) { domain="不明路径"; subDomain="不明路径"; } } } else { if(u.IsFile) { subDomain=domain="客户端本地文件路径"; } else { subDomain=domain="不明路径"; } } } catch { subDomain=domain="不明路径"; } } ///<summary> ///分析url字符串中的参数信息。 ///</summary> ///<paramname="url">输入的URL</param> ///<paramname="baseUrl">输出URL的基础部分</param> ///<paramname="nvc">输出分析后得到的(参数名,参数值)的集合</param> publicstaticvoidParseUrl(stringurl,outstringbaseUrl,outNameValueCollectionnvc) { if(url==null) thrownewArgumentNullException("url"); nvc=newNameValueCollection(); baseUrl=""; if(url=="") return; intquestionMarkIndex=url.IndexOf('?'); if(questionMarkIndex==-1) { baseUrl=url; return; } baseUrl=url.Substring(0,questionMarkIndex); if(questionMarkIndex==url.Length-1) return; stringps=url.Substring(questionMarkIndex+1); //开始分析参数对 Regexre=newRegex(@"(^|&)?(\w+)=([^&]+)(&|$)?",RegexOptions.Compiled); MatchCollectionmc=re.Matches(ps); foreach(Matchminmc) { nvc.Add(m.Result("$2").ToLower(),m.Result("$3")); } } #endregion } }
希望本文所述对大家的C#程序设计有所帮助。