【问题标题】:Request Object not picking up all characters请求对象未拾取所有字符
【发布时间】:2013-06-24 09:20:37
【问题描述】:

我对这种情况感到困惑。基本上我有一个传递给 aspx 页面的 URL,然后我尝试从 URL 获取查询字符串,但是当我尝试从 URL 获取查询字符串时,它会省略“+”并将其替换为空格。

My URL =  http://localhost:3872/Test.aspx?mt=jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=

Request["mt"] =jan1TNIixxA1 8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet q7rq7FoTJf S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s 0R7vW8I0S9d765RHdYU2xkRuojHYZU=

如你所见,这两个字符串是不同的。

我以为是对象到字符串的转换,但事实并非如此,因为对象的值在转换前省略了“+”。

可以做些什么来避免这种字符替换(我想尝试避免字符串操作)

还有可能是什么原因造成的?

【问题讨论】:

    标签: c# asp.net request


    【解决方案1】:

    因为+ 是空间" " 的url 编码表示,所以你得到了它。如果你想在你的值中保留加号,你需要对其进行 url 编码:

    以 URL 编码格式发送该查询字符串,然后您将获得预期的结果。

    见:why Request.QueryString replace + with empty char in some cases?

    【讨论】:

      【解决方案2】:

      你可以使用

      MyUrl = MyUrl.Replace("+",@"%2B");
      

      如果您使用 httprequest,问题是“+”字符被转换为空格。如果将其转换为十六进制值,则可以毫无问题地传递它。

      【讨论】:

        【解决方案3】:

        您应该使用HttpUtility.UrlEncode 来生成您的参数值。目前看来您使用的 base64 编码对于查询参数不是最优的。

        【讨论】:

          【解决方案4】:

          使用这个:

          mt=encodeURIComponent(mt);//if mt be --> jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=
          Response.Redirect("Test.aspx?"+mt);
          

          这将对您的 URL 进行编码,并且在此之后 '+' 将转换为 "%2B",如果您想读取编码的 URL,它将不会转换为空格。

          来自here

          【讨论】:

            【解决方案5】:

            如果在发送时避免更改字符串真的非常重要,则可以在从 httprequest 获取 ir 后更改它。也许你可以使用:

            MyUrl = (Request["mt"].Replace(" ","+"));
            

            url中不能传递空格,所以当你有空格时,你可以确定那里有一个'+'。

            【讨论】:

              【解决方案6】:

              您可以使用以下方法获取查询字符串

              string strQuery =  Request.Url.Query;
              

              【讨论】:

              • 这将如何处理多个查询字符串。我想再次尝试避免字符串操作。
              • 多查询字符串是什么意思??
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-01
              • 1970-01-01
              相关资源
              最近更新 更多