如何在系统生成的c#中更改字符串url中的查询字符串值

时间:2017-05-04 11:18:29

标签: c#

我的字符串URL如下 http://localhost:56856/s.aspx?&searchString=jacket&sortField=&pageNumber=2&pageSize=0&facetQuery=

我需要更改上面url中的查询字符串值,例如,如果我发现pageSize = 0,则需要更改其值pageNumber * 12。 比如上面的url pagnumber是2,页面大小是0所以页面大小应该是2 * 12 = 24。我使用了以下代码

string url=http://localhost:56856/s.aspx?&searchString=jacket&sortField=&pageNumber=2&pageSize=0&facetQuery=
    var QueryValues = HttpUtility.ParseQueryString(url);
                string pageno = QueryValues.Get("pageNumber");
                string pagesize = QueryValues.Get("pageSize");
                if (pagesize == "0")
                {
                    QueryValues.Set("pageSize", Convert.ToString(Convert.ToInt32(pageno) * 12));
            } 
在QueryValues中我得到了像这样的网址= http://localhost:%%2f55%/s%aspx?&searchString=jacket&sortField=&pageNumber=2&pageSize=0&facetQuery=

你能告诉我我错在哪里吗?如何将这个QueryValues转换为有效网址?

由于

1 个答案:

答案 0 :(得分:0)

我注意到的一件事是你在解析之前没有确定查询字符串是什么。我们可以通过在URL中查找IndexOf('?')来轻松找到这一点,该URL描述了QueryString中的URL。您可能想查看MSDN: HttpUtility.ParseQueryString Method文章,我在查看此方法时使用了他们的识别方法(我在处理网址时通常使用更多的原始方法)

请注意NameValueCollection QueryString可以在其中返回 null 值。

我建议在检索这些值时采取适当的对策,例如将字符串设置为空或将数字设置为0.我还建议您在检索时执行这些操作,而不是使用复合的`Convert.To \

 string url = @"http://localhost:56856/s.aspx?&searchString=jacket&sortField=&pageNumber=2&pageSize=0&facetQuery=";

 #region ===== Added: Identify and split =====
 int iqs = url.IndexOf('?');
 if iqs< 0) {
      // Cannot process, NO query string present
      // Corrective Action?
 } else {
      string urlQS= (iqs < url.Length - 1) ? currurl.Substring(iqs + 1) : String.Empty;
 #endregion ===================================

      var QueryValues = HttpUtility.ParseQueryString(urlQS); // changed from (url)

      string pageno = QueryValues.Get("pageNumber"); // catch null return ""
      string pagesize = QueryValues.Get("pageSize"); // int, catch null return 0

      if (pagesize == "0") {
           QueryValues.Set( "pageSize", Convert.ToString( Convert.ToInt32(pageno) * 12 ) );
      } 

 }