2011-07-25 94 views
1

我使用代码Request.QueryString [“u”]来读取传递给我的web应用程序的URL。如果通过URL不具有参数,但例如,如果这样的网址提交Request.QueryString用法读取传递的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

和评论,一切工作正常=这+是+ a + test + for PDF将被忽略。

我明白为什么会发生这种情况不需要解释:),但是如何解决这个问题呢?

我认为一种解决方法是用引号括住参数。像这样

http://mywebapp:80/submit.aspx?u= “http://www.submitedurl.com/top_sellers_pdf.php?GoodThru=7-21-2011 &评论=这是+ A +测试+为PDF”

其他什么解决方案可能是?

回答

1

当你建立你的查询字符串参数,可以使用:

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

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

如果不成功,您需要抓住查询字符串并自行解析。您可以使用得到整个查询字符串作为一个字符串:

Request.QueryString.ToString() 

...和使用“U =”争吵后得到的一切:

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

但是,如果原始URL中包含了含有参数和(26%)的数据? – Karel

+0

'&'s应该在查询字符串中转义为'%26'。 '%'s应该在查询字符串中转义为'%25'。 – Jez

0

如果你在URL参数的控制,当生成url时,可以用其他东西替换&,并在提取它时将其替换回来。

0

您可以使用原始URL并且自己解析它,或者你可以通过的Request.QueryString的NameValueCollection循环:`

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

    } 

你会知道U表示原来的基础URL,其他项目在原来的网址