¿Cómo envío una URL con cadenas de consulta como una cadena de consulta?

Estoy haciendo una redirección de una página a otra y otra redirección de la segunda página a una tercera. Tengo información de la primera página que no se usa en la segunda página pero debe transferirse a la tercera página. ¿Es posible enviar la URL de la tercera página con sus cadenas de consulta como una cadena de consulta a la segunda página? Aquí hay un ejemplo:

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

Mi problema es que la URL que se envía como cadena de consulta tiene dos variables de cadena de consulta, entonces, ¿cómo sabrá el sistema que lo que está después de & es la segunda variable de la segunda URL y no una segunda variable de la primera URL? Gracias.

preguntado el 03 de mayo de 12 a las 13:05

¿Ha considerado usar variables de sesión para eso? -

4 Respuestas

Debe codificar la URL que pasa como parámetro en su URL de redirección. Como esto:

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

Esto creará una URL correcta sin el doble '?' y caracteres '&':

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

Ver MSDN: Método HttpServerUtility.UrlEncode

Para extraer su URL de redireccionamiento de esta URL codificada, debe usar HttpServerUtility.UrlDecode para convertirlo en una URL correcta de nuevo.

contestado el 03 de mayo de 12 a las 13:05

La decodificación/codificación de URL no está bien definida. Cada SO/navegador/servidor tiene sus propias idiocracias. La implementación cambió entre .Netv1.1 y .Netv2.0, por lo que recomendaría seguir los consejos de @JulioHM y usar base64 para las URL que deben estar en los parámetros de consulta. bytes.com/topic/asp-net/answers/… - Gabe

La HttpServerUtility.UrlDecode que mencionas es accesible a través del HttpContext.Current.Server.UrlDecode o solo Server.UrlDecode en formularios web. También podrías usar la estática HttpUtility.UrlDecode. - BornToCode

Me resulta útil codificar los parámetros de la cadena de consulta en Base64 antes de enviarlos. En algunos casos, esto ayuda cuando necesita enviar todo tipo de caracteres especiales. No es una buena cadena de depuración, pero protegerá CUALQUIER COSA que envíe para que no se mezcle con otros parámetros.

Solo tenga en cuenta que el otro lado que está analizando la cadena de consulta también necesitará analizar Base64 para acceder a la entrada original.

contestado el 03 de mayo de 12 a las 13:05

Como se sugirió, usé base64 en C# - Convertir.FromBase64String, Convertir.ToBase64Stringy Sistema.Text.Encoding.ASCII.GetString. También lo necesitaba en JavaScript y lo usé btoa y de la A, a la B - FelizGoLucky

Su cadena de consulta debería verse así:

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

Comprobar: http://en.wikipedia.org/wiki/Query_string

¿Deberías tener uno? firmar y todos los parámetros unidos con &. Si los valores de los parámetros contienen caracteres especiales, simplemente Urlencode de ellas.

contestado el 03 de mayo de 12 a las 13:05

Parecen tres cadenas de consulta para MyURL1. Quiero que el nombre y el ID sean cadenas de consulta de MyURL2. - molinero

Luego acceda a QueryString actual antes de redirigir y pase los parámetros a la siguiente QueryString (los que le interesan). - empi

@DovMiller Solo digo cómo debería verse QueryString. Depende de usted cómo obtiene el QueryString que desea pasar a la siguiente dirección, es solo una cadena, por lo que puede usar una subcadena, etc. o simplemente acceder a los valores de los parámetros del diccionario QueryString. Tal vez, no entiendo completamente lo que estás tratando de lograr. - 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();
}

Respondido el 11 de junio de 13 a las 22:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.