有的時候我們要操作一個URL地址中查詢參數(shù),為了不破壞URL的原有結構,我們一般不能直接在URL的后面加&query=value,特別是我們的URL中有多個參數(shù)時,這種處理更麻煩。 
下面兩個小方法就是專門用來為一個URL添加一個查詢參數(shù)或刪除一個查詢參數(shù),這兩個方法隱藏了原URL有無參數(shù),是不是原來就有這個參數(shù),有沒有fragment(#anchor)這些細節(jié)和處理 
/**//// <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