Me dan un URI absoluto que contiene una cadena de consulta. Estoy buscando agregar de forma segura un valor a la cadena de consulta y cambiar un parámetro existente.
Preferiría no agregar &foo=baro usar expresiones regulares, el escape de URI es complicado. Más bien, quiero usar un mecanismo incorporado que sé que hará esto correctamente y manejará el escape.
He encontrado  un  montón de respuestas que todo uso HttpUtility. Sin embargo, al ser ASP.NET Core, ya no hay más ensamblado System.Web, por lo tanto, no más HttpUtility.
¿Cuál es la forma adecuada de hacer esto en ASP.NET Core mientras se dirige al tiempo de ejecución del núcleo?
                    
                        c#
                                asp.net
                                asp.net-core
                                
                    
                    
                        vcsjones
fuente
                
                fuente

Microsoft.AspNet.WebUtiltiespuede ser laMono.HttpUtilitybiblioteca .HttpUtilityyParseQueryStringmétodo.Respuestas:
Si está utilizando ASP.NET Core 1 o 2, puede hacerlo con
Microsoft.AspNetCore.WebUtilities.QueryHelpersel paquete Microsoft.AspNetCore.WebUtilities .Si usa ASP.NET Core 3.0 o superior,
WebUtilitiesahora forma parte del SDK de ASP.NET y no requiere una referencia de paquete nuget separada.Para analizarlo en un diccionario:
Tenga
ParseQueryStringen cuenta que, a diferencia de System.Web, devuelve un diccionario de tipoIDictionary<string, string[]>en ASP.NET Core 1.x, oIDictionary<string, StringValues>en ASP.NET Core 2.xo posterior, por lo que el valor es una colección de cadenas. Así es como el diccionario maneja múltiples parámetros de cadena de consulta con el mismo nombre.Si desea agregar un parámetro a la cadena de consulta, puede usar otro método en
QueryHelpers:Usando .net core 2.2 puede obtener la cadena de consulta usando
Obtendrá una colección de pares clave: valor, como este
fuente
Microsoft.AspNetCore.WebUtilitieslugar, puede ser necesario .La forma más fácil e intuitiva de tomar un URI absoluto y manipular su cadena de consulta usando solo paquetes ASP.NET Core, se puede hacer en unos pocos y sencillos pasos:
Instalar paquetes
PM> Paquete de instalación Microsoft.AspNetCore.WebUtilities
PM> Paquete de instalación Microsoft.AspNetCore.Http.Extensions
Clases importantes
Solo para señalarlos, aquí están las dos clases importantes que usaremos : QueryHelpers , StringValues , QueryBuilder .
El código
Para mantenerse al día con los cambios, puede consultar la publicación de mi blog sobre esto aquí: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
fuente
HttpRequesttiene unaQuerypropiedad que expone la cadena de consulta analizada a través de laIReadableStringCollectioninterfaz:Esta discusión sobre GitHub también lo apunta.
fuente
Esta función regresa
Dictionary<string, string>y no se usaMicrosoft.xxxpor compatibilidadAcepta codificación de parámetros en ambos lados
Acepta claves duplicadas (devuelve el último valor)
fuente
Es importante tener en cuenta que en el tiempo transcurrido desde que la respuesta principal se marcó como correcta, se
Microsoft.AspNetCore.WebUtilitiesha actualizado la versión principal (de 1.xx a 2.xx).Dicho esto, si está construyendo en contra
netcoreapp1.1, deberá ejecutar lo siguiente, que instala la última versión compatible1.1.2:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2fuente
Utilizo esto como método de extensión, funciona con cualquier número de parámetros:
Enlaces siguiente y anterior, por ejemplo, en una vista:
fuente