web-dev-qa-db-fra.com

Comment envoyer une URL avec des chaînes de requête en tant que chaîne de requête

Je fais une redirection d'une page à une autre et une autre redirection de la deuxième page à une troisième. J'ai des informations de la première page qui ne sont pas utilisées sur la deuxième page mais doivent être transférées sur la troisième page. Est-il possible d'envoyer l'URL de la troisième page avec ses chaînes de requête en tant que chaîne de requête à la deuxième page. Voici un exemple:

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

Mon problème est que l'URL envoyée en tant que chaîne de requête a deux variables de chaîne de requête, alors comment le système saura-t-il que ce qui est après le & est la deuxième variable de la deuxième URL et non une deuxième variable de la première URL? Je vous remercie.

15
Dov Miller

Vous devez coder l'URL que vous passez en tant que paramètre dans votre URL de redirection. Comme ça:

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

Cela va créer une URL correcte sans le double "?" et les caractères '&':

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

Voir MSDN: méthode HttpServerUtility.UrlEncode

Pour extraire votre URL de redirection de cette URL codée, vous devez utiliser HttpServerUtility.UrlDecode pour le transformer à nouveau en une URL correcte.

15
Remko Jansen

Je trouve utile de coder les paramètres de chaîne de requête dans Base64 avant d'envoyer. Dans certains cas, cela aide, lorsque vous devez envoyer toutes sortes de caractères spéciaux. Cela ne fait pas de bonnes chaînes de débogage, mais cela empêchera tout ce que vous envoyez de se mélanger avec d'autres paramètres.

N'oubliez pas que l'autre partie qui analyse la chaîne de requête devra également analyser la Base64 pour accéder à l'entrée d'origine.

2
JulioHM

Votre chaîne de requête devrait ressembler à ceci:

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

Vérifiez: http://en.wikipedia.org/wiki/Query_string

Vous devriez en avoir un? signe et tous les paramètres joints à &. Si les valeurs des paramètres contiennent des caractères spéciaux juste rlEncode eux.

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
Amin Malakoti Khah