Estoy trabajando con una página donde tengo una url como:

/directorio/empresa/fabricante

El uso de algunos de re-escribir las reglas de este se re-escrito

pruebas con /directorio/de la compañía dunkin%26donuts/

Algunos fabricantes tienen un signo en su nombre. Así que pensé que podría reemplazar el signo de y comercial con %26. Sin embargo, cuando me depurar el código y colocar el cursor sobre Request.QueryString me muestra {qq=company&manf=dunkin&donuts&cond=} y Request.QueryString["manf"] me da ‘dunkin’

Si puedo usar %24 ($) en lugar de » y » comercial, se cierne sobre Request.QueryString me da
{qs=company&manf=dunkin%24donuts&cond=} y Request.QueryString["manf"] me da ‘dunkin$donuts’

No entiendo el comportamiento diferente aquí. ¿Por qué parece como si la url codificada valor de un signo de y comercial obtiene decodificado antes de solicitar una clave específica, pero en otra dirección url codificada carácter, como un signo de dólar, sólo se decodifica después de que usted realmente petición en que se concreta la clave?

Es este un cambio reciente? Siempre he pensado que Request.QueryString[key] devuelve el texto actual sin descifrar primero. O tiene algo que ver con la url de re-escribe?

InformationsquelleAutor merk | 2012-10-26

3 Comentarios

  1. 9

    Sustitución de la y comercial con %26 debe causar que el valor que se escapó, por lo que Request.QueryString["manf"] daría dunkin&donuts.

    El autor de la pregunta de esta pregunta similar terminó dándose cuenta de que otro código en la misma página terminó pre-decodificación de su signo. Es posible que usted tiene algo similar ocurre? Tal vez algunos de javascript es la decodificación de la %26 en un signo de y comercial antes de enviarla al servidor. Trate de usar Firefox o Chrome developer tools para ver la dirección URL real de la cadena que se envía desde el navegador.

    Actualización

    Después de mirar a la pregunta de nuevo, me doy cuenta de que probablemente usted está utilizando una dirección URL Regrabadora. Este post describe un problema similar, y no sé de una solución segura, pero puede que desee probar el doble codificación de la y comercial mediante %2526 en lugar de %26.

    • Es posible que algo más está jugando con la url de la reescritura o tal vez algún otro código pre-existente en el sitio. Este no es un sitio que he creado, pero uno me tomó más de alguien más. Así que podría haber algún otro código que participan aquí. No había pensado en eso. Voy a hacer algo de investigación. gracias. Voy a actualizar esta pregunta una vez tengo más info
    • dbl codificación didnt trabajo btw – dunkin%2526donuts consiguió transformar en dunkin&25donuts
    • No estoy seguro de lo que ha cambiado, pero tu sugerencia para dbl codificación parece estar funcionando ahora. Intenté hacerlo como %25%32%36, que también trabajó. pero, a continuación, el navegador creo auto-convertido a %2526 y se comenzó a trabajar
    • Usted probablemente hizo %2625 el primer tiempo.
    • Esto sólo me ayudó a salir. gracias
  2. 35

    ASP.NET llama automáticamente UrlDecode() cuando tiene acceso a una propiedad por el índice de la clave (es decir, ( Request.QueryString["key"] ).

    Si quieres que sea codificado, acaba de hacer:

    HttpUtility.UrlEncode(Request.QueryString["key"]);

    En términos de la y comercial específicamente, que es un caso especial de caracteres debido a que ya se utiliza como una cadena de consulta delimitador. URL de la Codificación y decodificación de un signo de y comercial siempre debe dar & por esa misma razón.

    • Creo que sólo he contestado a la mitad de su pregunta mirando hacia atrás, he editado para incluir por qué exactamente signos son diferentes.
    • Eso es más completa. +1.
    • Me doy cuenta de que es un carácter especial – yo no entiendo por qué se parece conseguir decodificado en un punto diferente, a continuación, en comparación con el signo de dólar. Cuando me pase el ratón sobre la Solicitud.QueryString en VS2010, mientras que la depuración de la página, veo que el urlencoded valor para el signo de dólar – %24. Pero cuando se trata de la y comercial, siempre veo el valor decodificado.
    • Hay una referencia a un artículo de MSDN que indica que el UrlDecode es llamado automáticamente?
    • No sé amigo, pero si tratas de depuración de ti mismo verás seguro (que es lo que hice yo) 🙂
    • La depuración es lo que he estado haciendo y, sí, veo el valor de la Solicitud(«bla») donde bla=Algunos%2fValue me está dando Algunos/Valor. Sólo quiero oír de la boca del caballo antes de dirigir a mis compañeros de equipo para hacer un cambio. Esto es ignorar la pregunta: ¿qué otras magia está teniendo lugar? Lo de la codificación de la magia está en el objeto de Respuesta?
    • El problema con esto es que si usted desea caracteres especiales en la cadena de consulta. Por ejemplo yo estoy usando el ‘;’ para separar una lista de valores, a veces los valores contienen el signo. Cuando se hace referencia a que querystring con la Solicitud.Querystring[clave] se reemplaza %26 con un signo de y comercial. UrlEncoding que mantiene a mi y comercial como un %26 pero convierte mi ‘;’ a %3b, perdiendo así mi separadores.
    • Ver: msdn.microsoft.com/en-us/library/…

  3. 3

    Creo que una solución podría ser la de modificar el UrlRewrite regla para algo así.

        <rule name="TagPage" stopProcessing="true">
          <match url="^(tag)/([^/]+)/?$"/>
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
          </conditions>
          <action type="Rewrite" url="ListByTags.aspx?tag={UrlEncode:{R:2}}"/>
        </rule>

    La línea más importante aquí es el {UrlEncode:{R:2}}. Resolvió el problema para mí!

Dejar respuesta

Please enter your comment!
Please enter your name here