/**//// <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;
        }
Posted on 2006-07-08 13:54  arts  阅读(275)  评论(0编辑  收藏  举报