Pregunta

Estoy tratando de pasar en una cadena Base64 en un C#.Net aplicación web a través de la Cadena de consulta.Cuando la cadena llega el "+" (más) está siendo reemplazado por un espacio.Parece que el automático URLDecode proceso está haciendo esto.No tengo control sobre lo que se transmite a través de la Cadena de consulta.Es allí cualquier manera de manejar este lado del servidor?

Ejemplo:

http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

Produce:

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

Algunas personas han sugerido URLEncoding la cadena de consulta:

System.Web.HttpUtility.UrlEncode(yourString) 

Yo no puedo hacer eso ya que no tengo control sobre la rutina de llamada (que está trabajando bien con otros idiomas).

También hubo la propuesta de sustitución de los espacios con un signo más:

Request.QueryString["VLTrap"].Replace(" ", "+");

Tuve pesar de esto pero mi preocupación con ella, y yo debería haber mencionado esto para empezar, es que no sé qué otros los caracteres pueden ser malformaciones además el signo más.

Mi principal objetivo es interceptar la Cadena de consulta antes de que se ejecuta a través del descodificador.

Para ello he intentado buscar en la Solicitud.QueryString.toString (), pero este contenía la misma información con formato incorrecto.Es allí cualquier manera de ver el raw QueryString antes de es URLDecoded?

Después de más pruebas parece que .Net espera que todo lo que viene de la QuerString a ser la URL codificado, pero el navegador no automáticamente la dirección URL de codificar las peticiones GET.

¿Fue útil?

Solución

Usted podría reemplazar manualmente el valor (argument.Replace(' ', '+')) o consulte la HttpRequest.ServerVariables["QUERY_STRING"] (incluso mejor que el HttpRequest.Dirección Url.Consulta) y analizar a ti mismo.

Sin embargo, se debe tratar de resolver el problema en el que la dirección URL es dado;un signo más necesita obtener codificado como "%2B" en la URL porque un plus de lo contrario, representa un espacio.

Si no se controla la entrada de Url, la primera opción sería preferible evitar la mayoría de los errores de esta manera.

Otros consejos

La solución que se sugiere:

Request.QueryString["VLTrap"].Replace(" ", "+");

Debería funcionar bien.En cuanto a tu inquietud:

Tuve pesar de esto pero mi preocupación con ella, y yo debería haber mencionado esto para empezar, es que no sé qué otros personajes puede ser incorrecto, además el signo más.

Esto es fácil de aliviar por la lectura acerca de base64.El único de caracteres alfanuméricos que son legales en la moderna base64 son "/", "+" y "=" (que sólo es utilizado para el relleno).

De esos, "+" es el único que tiene un significado especial como el carácter de escape de representación en las URLs.Mientras que los otros dos tienen un significado especial en las Url (delimitador de ruta de acceso y consulta de la cadena de separador), que no debería representar un problema.

Así que yo creo que se debe ACEPTAR.

Tengo exactamente este mismo problema, excepto que tengo el control sobre mi URL.Incluso con Server.URLDecode y Server.URLEncode no volver a convertir un + signo, a pesar de que mi cadena de consulta se ve de la siguiente manera:

http://localhost/childapp/default.aspx?TokenID=0XU%2fKUTLau%2bnSWR7%2b5Z7DbZrhKZMyeqStyTPonw1OdI%3d

Cuando yo realice los siguientes.

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);

todavía no convertir la %2b de nuevo en un + signo.En lugar de eso tienes que hacer lo siguiente:

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
tokenID = tokenID.Replace(" ", "+");

Luego de que funciona correctamente.Realmente extraño.

He tenido un problema similar con un parámetro que contiene el valor de Base64 y cuando se trata con '+'.Sólo A Petición.QueryString["VLTrap"].Replace(" ", "+");funcionó bien para mí;no UrlEncode o de otra codificación ayudando porque incluso si usted muestra codificada enlace en la página de sí mismo con '+' codificados '%2b' entonces es el navegador que cambia a '+' al principio, cuando showen y cuando se haga clic en él, a continuación, navegador, se transforma en espacio vacío.Así que no hay forma de controlarlo como cartel original dice que incluso si se muestran enlaces a sí mismo.La misma cosa con tal enlaces en correos html.

Si usted URLEncode la cadena antes de añadir a la URL que usted no tiene ninguno de estos problemas (el automático URLDecode vuelve al estado original).

Bueno, obviamente, usted debe tener la cadena Base64 URLEncoded antes de enviarlos al servidor.
Si usted no puede lograr eso, me gustaría sugerir simplemente la sustitución de cualquier incrustado espacios a +;desde b64 cadenas no se supone que tienen los espacios, es una táctica legítima...

System.Web.HttpUtility.UrlEncode(yourString) hará el truco.

Como un truco rápido usted puede reemplazar el espacio con carácter más antes de base64-decodificación.

Si usted utiliza System.Uri.UnescapeDataString(yourString) va a ignorar el +.Este método sólo debe utilizarse en casos como el tuyo, donde, cuando la cadena se ha codificado mediante algún tipo de legado enfoque en el cliente o en el servidor.

Esta entrada del blog:http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx

Yo soy de ninguna manera un C# developer, pero parece que tú necesitas la url de CODIFICAR la cadena Base64, antes de enviarlo a una dirección url.

No puede usted acaba de asumir un espacio es un + y reemplazarla?

Request.QueryString["VLTrap"].Replace(" ", "+");

;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top