ASP.NET: URI handling

后端 未结 6 2122
暗喜
暗喜 2021-01-06 05:53

I\'m writing a method which, let\'s say, given 1 and hello should return http://something.com/?something=1&hello=en.

I

6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-06 06:38

    Just combined answers=>

    public static class UriBuilderExtensions
    {
        public static void AddQueryArgument(this UriBuilder b, string key, string value)
        {
            key = Uri.EscapeDataString(key);
            value = Uri.EscapeDataString(value);
    
            var x = HttpUtility.ParseQueryString(b.Query);
            if (x.AllKeys.Contains(key)) throw new ArgumentNullException
                    ("Key '{0}' already exists!".FormatWith(key));
            x.Add(key, value);
            b.Query = x.ToString();
        }
    
        public static void EditQueryArgument(this UriBuilder b, string key, string value)
        {
            key = Uri.EscapeDataString(key);
            value = Uri.EscapeDataString(value);
    
            var x = HttpUtility.ParseQueryString(b.Query);
            if (x.AllKeys.Contains(key))
                x[key] = value;
            else throw new ArgumentNullException
                    ("Key '{0}' does not exists!".FormatWith(key));
            b.Query = x.ToString();
        }
    
        public static void AddOrEditQueryArgument(this UriBuilder b, string key, string value)
        {
            key = Uri.EscapeDataString(key);
            value = Uri.EscapeDataString(value);
    
            var x = HttpUtility.ParseQueryString(b.Query);
            if (x.AllKeys.Contains(key))
                x[key] = value;
            else
                x.Add(key, value);
            b.Query = x.ToString();
        }
    
        public static void DeleteQueryArgument(this UriBuilder b, string key)
        {
            key = Uri.EscapeDataString(key);
            var x = HttpUtility.ParseQueryString(b.Query);
            if (x.AllKeys.Contains(key))
                x.Remove(key);
            b.Query = x.ToString();
        }
    }
    

    Half baked code. But should work well enough.

提交回复
热议问题