首页 > 编程 > .NET > 正文

asp.net下URL处理两个小工具方法

2024-07-10 13:14:43
字体:
来源:转载
供稿:网友
有的时候我们要操作一个URL地址中查询参数,为了不破坏URL的原有结构,我们一般不能直接在URL的后面加&query=value,特别是我们的URL中有多个参数时,这种处理更麻烦。 
下面两个小方法就是专门用来为一个URL添加一个查询参数或删除一个查询参数,这两个方法隐藏了原URL有无参数,是不是原来就有这个参数,有没有fragment(#anchor)这些细节和处理 
/**//// <summary> 
/// Add a query to an URL. 
/// if the URL has not any query,then append the query key and value to it. 
/// if the URL has some queries, then check it if exists the query key already,replace the value, or append the key and value 
/// if the URL has any fragment, append fragments to the URL end. 
/// </summary> 
public static string SafeAddQueryToURL(string key,string value,string url) 

int fragPos = url.LastIndexOf("#"); 
string fragment = string.Empty; 
if(fragPos > -1) 

fragment = url.Substring(fragPos); 
url = url.Substring(0,fragPos); 

int querystart = url.IndexOf("?"); 
if(querystart < 0) 

url +="?"+key+"="+value; 

else 

Regex reg = new Regex(@"(?<=[&/?])"+key+@"=[^/s&#]*",RegexOptions.Compiled); 
if(reg.IsMatch(url)) 
url = reg.Replace(url,key+"="+value); 
else 
url += "&"+key+"="+value; 

return url+fragment; 

/**//// <summary> 
/// Remove a query from url 
/// </summary> 
/// <param name="key"></param> 
/// <param name="url"></param> 
/// <returns></returns> 
public static string SafeRemoveQueryFromURL(string key,string url) 

Regex reg = new Regex(@"[&/?]"+key+@"=[^/s&#]*&?",RegexOptions.Compiled); 
return reg.Replace(url,new MatchEvaluator(PutAwayGarbageFromURL)); 

private static string PutAwayGarbageFromURL(Match match) 

string value = match.Value; 
if(value.EndsWith("&")) 
return value.Substring(0,1); 
else 
return string.Empty; 


测试: 
string s = "http://www.cnblogs.com/?a=1&b=2&c=3#tag"; 
WL(SafeRemoveQueryFromURL("a",s)); 
WL(SafeRemoveQueryFromURL("b",s)); 
WL(SafeRemoveQueryFromURL("c",s)); 
WL(SafeAddQueryToURL("d","new",s)); 
WL(SafeAddQueryToURL("a","newvalue",s)); 
// 输出如下: 
// http://www.cnblogs.com/?b=2&c=3#tag 
// http://www.cnblogs.com/?a=1&c=3#tag 
// http://www.cnblogs.com/?a=1&b=2#tag 
// http://www.cnblogs.com/?a=1&b=2&c=3&d=new#tag 
// http://www.cnblogs.com/?a=newvalue&b=2&c=3#tag 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表