【问题标题】:Request.QueryString usage to read passed urlRequest.QueryString 使用读取传递的 url
【发布时间】:2011-07-25 08:43:02
【问题描述】:

我使用代码 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

并且 cmets=This+is+a+test+for+PDF 被忽略。

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

我认为一种解决方案是用引号将参数括起来。像这样

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

还有什么其他解决方案?

【问题讨论】:

    标签: c# asp.net query-string


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        Request.QueryString.ToString()
        

        ...并使用以下方法获取 'u=' 参数之后的所有内容:

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

        【讨论】:

        • 但是如果原始url包含包含&(%26)作为数据的参数呢?
        • &s 应该在查询字符串中转义为%26%s 应在查询字符串中转义为 %25
        【解决方案4】:

        您可以使用原始 url 并自己解析它,也可以循环访问 Request.Querystring NameValueCollection:`

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多