Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

262
Vistas
Analizar matrices de cadenas de consulta utilizando la sintaxis de varias claves o comas

Tengo un activador HTTP de función de Azure de .NET Core 6.0.

Me gustaría manejar un parámetro de cadena de consulta de matriz en estas dos formas comunes:

  • ?param=foo&param=escape%2Ctest
  • ?param=foo,escape%2Ctest

En ambos casos, me gustaría extraer la matriz ["foo", "escape,test"] .

Me sorprendió descubrir que las opciones de análisis de cadena de consulta disponibles para mí no admitían la sintaxis de coma o la URL descodificó la cadena de consulta como parte de la agrupación de parámetros.

He intentado usar varias API dotnet diferentes:

  • System.Web. HttpUtility.ParseQueryString
  • Microsoft.AspNetCore.WebUtilities. QueryHelpers.ParseQuery
  • Microsoft.AspNetCore.Http. HttpRequest.Query

Aquí hay una demostración en .NET Fiddle :

 var qs = "?param=foo,escape%2Ctest"; var a = httpRequest.Query["param"]; // ["foo,escape,test"] var b = HttpUtility.ParseQueryString(qs)["param"]; // "foo,escape,test" var c = QueryHelpers.ParseQuery(qs)["param"]; // ["foo,escape,test"]

Estoy un poco sorprendido de que no haya soporte para el formato separado por comas. Y estoy muy sorprendido de que no parezca haber una forma de obtener la cadena de consulta segmentada sin decodificar también los parámetros de la cadena de consulta (lo que impide distinguir entre param=foo,escape%2Ctest y ?param=foo,escape,test ).

Publicaré mi solución actual como una "respuesta" a continuación, pero espero que me falte una solución más simple que use una biblioteca .NET. Si alguien puede señalar lo que me he perdido aquí, se lo agradecería.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Aquí está mi solución actual. Nuevamente, espero que haya una forma menos manual de lograr este comportamiento.

 public static IDictionary<string, List<string>> GroupByKey(this QueryString queryString) { if (!queryString.Contains("?")) { throw new ArgumentException("Expected query string to contain '?' character."); } var encodedUrl = queryString.Value; var result = new Dictionary<string, List<string>>(); string trimmedQueryString = encodedUrl.Split('?')[1]; string[] queryStringSections = trimmedQueryString.Split('&'); foreach (var section in queryStringSections) { var sides = section.Split('='); var key = sides[0]; var value = sides[1]; var values = value.Split(','); var decodedValues = values.Select(x => WebUtility.UrlDecode(x)); if (!result.ContainsKey(key)) { result.Add(key, new List<string>()); } result[key].AddRange(decodedValues); } return result; }
over 4 years ago · Santiago Trujillo Denunciar

0

Desafortunadamente, no existe una especificación oficial en RFC 3986 > Sección 3.4 que detalle cómo pasar múltiples valores para un parámetro de consulta.

Dicho esto, los navegadores parecen implementar de forma nativa el enfoque de varias teclas al crear una cadena de consulta por su cuenta. Por ejemplo, en la siguiente demostración :

 <form method="GET"> <label for="cars">Choose a car:</label> <select name="cars" id="cars" multiple> <option value="audi" selected>Audi</option> <option value="saab" selected>Saab</option> </select> <button type="submit">Submit</button> </form>

La solicitud de obtención se enviará con ?cars=audi&cars=saab

En ausencia de una especificación, con dotnet que ya admite el enfoque de varias claves con el resultado deseado , y dado que los navegadores usan varias claves de forma nativa, puede valer la pena actualizar la forma en que crea cadenas de consulta en el cliente.

Quizás alguien más pueda agregar una forma inteligente de analizar en .net, pero de lo contrario, puede estar luchando cuesta arriba contra la implementación en dotnet.

Otras lecturas:

  • Forma correcta de pasar múltiples valores para el mismo nombre de parámetro en la solicitud GET
  • Cómo pasar múltiples parámetros en una cadena de consulta
  • Posición autorizada de claves de consulta HTTP GET duplicadas
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda