Replace item in querystring

前端 未结 11 1478
甜味超标
甜味超标 2020-12-11 01:23

I have a URL that also might have a query string part, the query string might be empty or have multiple items.

I want to replace one of the items in the query string

11条回答
  •  天涯浪人
    2020-12-11 01:50

    I used the following code to append/replace the value of a parameter in the current request URL:

        public static string CurrentUrlWithParam(this UrlHelper helper, string paramName, string paramValue)
        {
            var url = helper.RequestContext.HttpContext.Request.Url;
            var sb = new StringBuilder();
    
            sb.AppendFormat("{0}://{1}{2}{3}",
                            url.Scheme,
                            url.Host,
                            url.IsDefaultPort ? "" : ":" + url.Port,
                            url.LocalPath);
    
            var isFirst = true;
    
            if (!String.IsNullOrWhiteSpace(url.Query))
            {
                var queryStrings = url.Query.Split(new[] { '?', ';' });
                foreach (var queryString in queryStrings)
                {
                    if (!String.IsNullOrWhiteSpace(queryString) && !queryString.StartsWith(paramName + "="))
                    {
                        sb.AppendFormat("{0}{1}", isFirst ? "?" : ";", queryString);
                        isFirst = false;
                    }
                }
            }
    
            sb.AppendFormat("{0}{1}={2}", isFirst ? "?" : ";", paramName, paramValue);
    
            return sb.ToString();
        }
    

    Maybe this helps others when finding this topic.

    Update:

    Just saw the hint about UriBuilder and did a second version using UriBuilder, StringBuilder and Linq:

        public static string CurrentUrlWithParam(this UrlHelper helper, string paramName, string paramValue)
        {
            var url = helper.RequestContext.HttpContext.Request.Url;
            var ub = new UriBuilder(url.Scheme, url.Host, url.Port, url.LocalPath);
    
            // Query string
            var sb = new StringBuilder();
            var isFirst = true;
            if (!String.IsNullOrWhiteSpace(url.Query))
            {
                var queryStrings = url.Query.Split(new[] { '?', ';' });
                foreach (var queryString in queryStrings.Where(queryString => !String.IsNullOrWhiteSpace(queryString) && !queryString.StartsWith(paramName + "=")))
                {
                    sb.AppendFormat("{0}{1}", isFirst ? "" : ";", queryString);
                    isFirst = false;
                }
            }
            sb.AppendFormat("{0}{1}={2}", isFirst ? "" : ";", paramName, paramValue);
            ub.Query = sb.ToString();
    
            return ub.ToString();
        }
    

提交回复
热议问题