リクエストオブジェクトがすべての文字を取得しない

私はこのシナリオで困惑しています。基本的に私は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=

ご覧のとおり、この2つの文字列は異なります。

私はそれが文字列変換の対象だと思ったが、これは、オブジェクトの値が変換前に省略された '+'を持つためにそうではないようである。

この文字の置換を避けるためにできること(文字列の操作を避けようとします)

また、何が原因かもしれませんか?

2

6 答え

あなたは使うことができます

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

問題は、httprequestを使用すると、 '+'文字が空白に変換されることです。 16進値に変換すると、問題なくそのまま渡すことができます。

1
追加された

あなたがそれを送信するときに文字列を変更しないように本当に重要な場合は、httprequestからirを取得した後に文字列を変更することができます。たぶんあなたは使うことができます:

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

スペースをURLに渡す可能性はないので、スペースがある場合は、そこに「+」があることを確認できます。

1
追加された

これを使って:

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

これによりURLがエンコードされ、その後に '+'が「%2B」に変換され、エンコードされたURLを読み取る場合はスペースに変換されません。

from here

1
追加された

HttpUtility.UrlEncode を使用して生成する必要がありますパラメータ値。現在のところ、クエリパラメータに最適ではないbase64エンコーディングを使用しているようです。

1
追加された

+ はURLの "" 表現で表現されているためです。値にプラス記号を付ける場合は、URLエンコードする必要があります:

URLにエンコードされたformateでそのクエリー文字列を送信すると、期待される結果が得られます。

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

1
追加された

次のメソッドを使用してクエリ文字列を取得できます

string strQuery =  Request.Url.Query;
0
追加された
何を言っているのですか?複数のクエリ文字列?
追加された 著者 Rajeev Kumar,
これは複数のクエリ文字列でどのように動作しますか?繰り返しますが、私は文字列の操作を避けようとします。
追加された 著者 SpaceApple,