URL处理两个小工具方法

本文介绍两个实用工具方法,用于安全地向URL添加或移除查询参数,同时保持URL结构完整,包括处理是否存在参数及片段标识符的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

URL处理两个小工具方法
有的时候我们要操作一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rjzou2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值