es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

QueryBuilder no está codificando `@` en los parámetros de la consulta, ¿hay alguna forma de forzarlo?

Tengo un servicio web personalizado al cual consulto y proporciono un correo electrónico (MyUser@MyDomain.com) y una cuenta de anuncio (MyDomain\\MyUser) como argumentos utilizando QueryBuilder, pero cuando hago .ToQueryString(), ¿el símbolo @ no se codifica?

¿Hay alguna forma de obtener una cadena codificada correctamente o alguna razón por la que no se está codificando?

QueryBuilder qb = new QueryBuilder();
qb.Add("adAccount", "MyDomain\\MyUser");
qb.Add("email", "MyUser@MyDomain.com");

var queryString = qb.ToQueryString();

Mi código anterior devuelve (@):

?adAccount=MyDomain%5CMyUser&email=MyUser@MyDomain.com

Pero esperaría (%40):

?adAccount=MyDomain%5CMyUser&email=MyUser%40MyDomain.com

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que @ no se codifica es porque es un carácter reservado en las URL, pero no necesita ser codificado en la parte del query string de una URL.

    De hecho, codificar @ en el query string puede causar problemas con ciertas APIs o servicios que esperan direcciones de correo electrónico en su forma original.

    Por lo tanto, no es necesario codificar el símbolo @ en la salida de tu QueryBuilder.

    Si aún deseas codificarlo, puedes usar el método HttpUtility.UrlEncode, de la siguiente manera:

    QueryBuilder qb = new QueryBuilder();
    qb.Add("adAccount", "MiDominio\\MiUsuario");
    qb.Add("email", HttpUtility.UrlEncode("MiUsuario@MiDominio.com"));
    
    var queryString = qb.ToQueryString();
    

    Esto resulta en la siguiente salida:

    ?adAccount=MiDominio%5CMiUsuario&email=MiUsuario%40MiDominio.com

Comments are closed.