加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 是否有支持请求参数连接的URL构建器?

发布时间:2020-12-16 04:35:02 所属栏目:asp.Net 来源:网络整理
导读:我希望实现以下内容: UrlBuilder ub = new UrlBuilder("http://www.google.com/search");ub.Parameters.Add("q","request");ub.Parameters.Add("sourceid","ie8");string uri = ub.ToString(); //http://www.google.com/search?q=requestsourceid=ie8 .NET
我希望实现以下内容:
UrlBuilder ub = new UrlBuilder("http://www.google.com/search");
ub.Parameters.Add("q","request");
ub.Parameters.Add("sourceid","ie8");

string uri = ub.ToString(); //http://www.google.com/search?q=request&sourceid=ie8

.NET中有什么东西,或者我必须创建自己的东西吗?

解决方法

我所知道的并不存在.这里有一些简单的东西可以满足您的需求.用法是:
UrlBuilder ub = new UrlBuilder("www.google.com/search")
        .AddQuery("q","request")
        .AddQuery("sourceid","ie8");

        string url=ub.ToString();

==

代码是:

public class UrlBuilder
    {
        private string _authority;
        private string _host;
        private int? _port;
        private Dictionary<string,object> _query = new Dictionary<string,object>();

        public UrlBuilder(string host)
            : this("http",host,null)
        {

        }
        public UrlBuilder(string authority,string host)
            : this(authority,null)
        {
        }
        public UrlBuilder(string authority,string host,int? port)
        {
            this._authority = authority;
            this._host = host;
            this._port = port;
        }

        public UrlBuilder AddQuery(string key,object value)
        {
            this._query.Add(key,value);
            return this;
        }

        public override string ToString()
        {
            string url = _authority + "://" + _host;
            if (_port.HasValue)
            {
                url += ":" + _port.ToString();
            }


            return AppendQuery(url);
        }

        private string AppendQuery(string url)
        {
            if (_query.Count == 0)
            {
                return url;
            }

            url += "?";
            bool isNotFirst = false;
            foreach (var key in this._query.Keys)
            {
                if (isNotFirst)
                {
                    url += "&";
                }
                url += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(this._query[key].ToString());
                isNotFirst = true;
            }

            return url;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读