ASP.net código URLEn Ampersand para uso na seqüência de consulta

Preciso redirect para uma URL passando um parâmetro como uma string de consulta.

Isso pode include um Ampersand no valor. tal como

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

No entanto, isso retorna http://www.example.com/?Value=This+&+That

O que devo usar para codificar essa string?

EDIT: Obrigado Luke por apontar o óbvio, o código realmente funciona corretamente. Eu peço desculpas, minha pergunta não era uma pergunta válida depois de tudo!

A página que eu ia ter tinha um monte de código legado antigo que aparentemente está fazendo algum tipo de codificação e decodificação em si, fazendo parecer que meu urlencode não estava funcionando.

Minha solução infelizmente é abandonar completamente o uso de um & até que o código em questão possa ser reescrito. Você não apenas odeia código antigo!

A documentação sugere que Server.UrlEncode deve manipular E comercial corretamente.

Acabei de testar seu código exato e a string retornada foi codificada corretamente:

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

Tecnicamente fazendo:

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

vai fazer o truque.

EDIT: Parece haver alguns problemas complicados com todo o UrlEncode / HttpEncode methods que não fazem o truque. Eu escrevi um método simples um tempo atrás que pode vir a calhar. Isso deve abranger todos os principais problemas de codificação, e é fácil escrever um “desanitizador” também.

 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 

Outro personagem que precisa escaping é o apóstrofo. Substitua por% 27.

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

HttpUtility.UrlEncode () e Server.UrlEncode () não substituem esse caractere junto com alguns outros para compatibilidade com outros .NET Frameworks. Consulte este artigo da Microsoft para obter detalhes: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

isso está correto, no entanto, se você tiver vários parâmetros na string de consulta.

por exemplo: & firstname = bob & secondName = “Tracy e John”

Você deve usar Server.UrlEncode(string containing the ampersand) .

Acabei de testar e a string de consulta retornada foi codificada e decodificada corretamente.

HttpUtility não funcionou para esta operação.

E se você está recebendo um valor de um GridView o & ampersand pode muito bem estar aparecendo como "&" :

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

Então, neste caso, você vai querer usar:

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