我的字符串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转换为有效网址?
由于
答案 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 ) );
}
}