web-dev-qa-db-ja.com

クエリ文字列を含むURLをクエリ文字列として送信する方法

1つのページから別のページへのリダイレクトと、2番目のページから3番目のページへの別のリダイレクトを行っています。 1ページ目から情報があり、2ページ目では使用していませんが、3ページ目に転送する必要があります。クエリ文字列を含む3番目のページのURLをクエリ文字列として2番目のページに送信することは可能ですか?次に例を示します。

Response.Redirect("MyURL1?redi=MyURL2?name=me&ID=123");

私の問題は、クエリ文字列として送信されるURLに2つのクエリ文字列変数があることです。そのため、システムは&の後にあるものが、最初のURLの2番目の変数ではなく2番目のURLの2番目の変数であることをどのようにして知るのでしょうか。ありがとうございました。

15
Dov Miller

リダイレクトURLのパラメーターとして渡すURLをエンコードする必要があります。このような:

MyURL = "MyURL1?redi=" + Server.UrlEncode("MyURL2?name=me&ID=123");

これにより、二重の「?」なしで正しいURLが作成されますおよび「&」文字:

MyURL1?redi=MyURL2%3fname%3dme%26ID%3d123

MSDNを参照してください: HttpServerUtility.UrlEncode Method

このエンコードされたURLからリダイレクトURLを抽出するには、HttpServerUtility.UrlDecodeを使用して、正しいURLに再度変換する必要があります。

15
Remko Jansen

送信する前に、Base64でクエリ文字列パラメーターをエンコードすると便利です。これは、すべての種類の特殊文字を送信する必要がある場合に役立ちます。これは適切なデバッグ文字列にはなりませんが、送信しているすべてのものを他のパラメーターと混同しないように保護します。

覚えておいてください、クエリ文字列を解析している反対側も、元の入力にアクセスするためにBase64を解析する必要があります。

2
JulioHM

クエリ文字列は次のようになります。

MyURL1?redi=MyURL2&name=me&ID=123

チェック: http://en.wikipedia.org/wiki/Query_string

あなたはそれを持っているべきですか?記号と&で結合されたすべてのパラメーター。パラメータ値に特殊文字が含まれている場合は rlEncode それらのみです。

2
empi
using System.IO;
using System.Net;

static void sendParam()
{

    // Initialise new WebClient object to send request
    var client = new WebClient();

    // Add the QueryString parameters as Name Value Collections
    // that need to go with the HTTP request, the data being sent
    client.QueryString.Add("id", "1");
    client.QueryString.Add("author", "Amin Malakoti Khah");
    client.QueryString.Add("tag", "Programming");

    // Prepare the URL to send the request to
    string url = "http://026sms.ir/getparam.aspx";

    // Send the request and read the response
    var stream = client.OpenRead(url);
    var reader = new StreamReader(stream);
    var response = reader.ReadToEnd().Trim();

    // Clean up the stream and HTTP connection
    stream.Close();
    reader.Close();
}
0