Request.QueryString用于读取传递的url

时间:2011-07-25 08:43:03

标签: c# asp.net query-string

我使用代码Request.QueryString [“u”]来读取传递给我的Web应用程序的URL。如果传递的url没有参数但是例如提交了这样的url

,那么一切正常

http://mywebapp:80/submit.aspx?u=http://www.submitedurl.com/top_sellers_pdf.php?GoodThru=7-21-2011&comments=This+is+a+test+for+PDF

Request.QueryString [“u”]返回

http://www.submitedurl.com/top_sellers_pdf.php?GoodThru=7-21-2011

和评论=此+ + + + + + + + + PDF被忽略。

我理解为什么这不需要解释:),但是如何解决这个问题?

我认为一种解决方案是用引号括起参数。喜欢这个

http://mywebapp:80/submit.aspx?u=“http://www.submitedurl.com/top_sellers_pdf.php?GoodThru=7-21-2011&comments=This+is+a+test+for+PDF”

还有什么其他解决方案?

4 个答案:

答案 0 :(得分:1)

构建查询字符串时,请使用:

var value = HttpUtility.UrlEncode("My querystring with & inside it");

答案 1 :(得分:0)

无论将哪个URL传递给您的应用程序都是错误的。 RFC 2396声明&是URI中的保留字符,如果要将其视为数据,则必须转义为%26,而不是查询字符串分隔符。是否可以修复将URL传递给Web应用程序的行为?

如果失败,您需要获取查询字符串并自行解析。您可以使用以下命令将整个查询字符串作为一个字符串获取:

Request.QueryString.ToString()

...并且在' u ='之后获取所有内容。参数使用:

Request.QueryString.ToString().Substring(Request.QueryString.ToString().IndexOf("u=")+2)

答案 2 :(得分:0)

如果您控制了URL参数,则可以替换&生成url时使用其他内容,并在提取url时将其替换回来。

答案 3 :(得分:0)

您可以使用原始URL并自行解析它,也可以遍历Request.Querystring NameValueCollection:`

foreach (KeyValuePair<string, string> item in Request.QueryString)
    {
       string  a = item.Key; 
        string b = item.Value;

    }

你会知道U代表原始基本网址,其他项目是原始网址中的参数