Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

264
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda