Atributo de URLEncode ASP.Net para uso en Cadena de consulta

Necesito redireccionar a una url que pasa un parámetro como cadena de consulta.

Esto puede incluir un Ampersand en el valor. como

string value = "This & That"; Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value)); 

Sin embargo, esto devuelve http://www.example.com/?Value=This+&+That

¿Qué debería estar usando para codificar esta cadena?

EDITAR: Gracias a Luke por señalar lo obvio, el código realmente funciona correctamente. Me disculpo, ¡mi pregunta no era una pregunta válida después de todo!

La página que iba a tener tenía un montón de código antiguo heredado que, al parecer, está haciendo un poco de encoding y desencoding, por lo que parece que mi urlencode no funcionaba.

Desafortunadamente, mi solución es dejar de utilizar por completo un & hasta que el código en cuestión pueda ser reescrito. ¡No odies el viejo código!

La documentación sugiere que Server.UrlEncode debe manejar los signos y símbolos correctamente.

Acabo de probar tu código exacto y la cadena devuelta se codificó correctamente:

http://www.example.com/?Value=This+%26+That

Técnicamente haciendo:

 value = value.Replace("&", "%26") 

hará el truco

EDITAR: Parece haber algunos problemas complicados con los métodos completos de UrlEncode / HttpEncode que no funcionan del todo. Escribí un método simple hace un tiempo que puede ser útil. Esto debería cubrir todos los principales problemas de encoding, y también es fácil escribir un “desanitizador”.

 Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String Dim Results As String Results = RawURLParameter Results = Results.Replace("%", "%25") Results = Results.Replace("<", "%3C") Results = Results.Replace(">", "%3E") Results = Results.Replace("#", "%23") Results = Results.Replace("{", "%7B") Results = Results.Replace("}", "%7D") Results = Results.Replace("|", "%7C") Results = Results.Replace("\", "%5C") Results = Results.Replace("^", "%5E") Results = Results.Replace("~", "%7E") Results = Results.Replace("[", "%5B") Results = Results.Replace("]", "%5D") Results = Results.Replace("`", "%60") Results = Results.Replace(";", "%3B") Results = Results.Replace("/", "%2F") Results = Results.Replace("?", "%3F") Results = Results.Replace(":", "%3A") Results = Results.Replace("@", "%40") Results = Results.Replace("=", "%3D") Results = Results.Replace("&", "%26") Results = Results.Replace("$", "%24") Return Results End Function 

Otro personaje que necesita escapar es el apóstrofo. Reemplácelo con% 27.

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode () y Server.UrlEncode () no reemplazan este carácter junto con algunos otros por compatibilidad con versiones anteriores con otros .Net Frameworks. Consulte este artículo de Microsoft para obtener más detalles: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

sin embargo, esto es correcto si tiene varios parámetros en la cadena de consulta.

por ejemplo: & firstname = bob & secondName = “Tracy and John”

Debe usar Server.UrlEncode(string containing the ampersand) .

Acabo de probarlo y la cadena de consulta devuelta se codificó correctamente y luego se decodificó.

HttpUtility no funcionó para esta operación.

Y si obtiene un valor de un GridView & ampersand "&" & ampersand bien podría aparecer como "&" :

 row.Cells[4].Text.ToString() = xxxx& 

Entonces, en este caso, querrás usar:

 .Replace("&", "%26")