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#程序设计有所帮助。