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=bar
o 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.WebUtilties
puede ser laMono.HttpUtility
biblioteca .HttpUtility
yParseQueryString
método.Respuestas:
Si está utilizando ASP.NET Core 1 o 2, puede hacerlo con
Microsoft.AspNetCore.WebUtilities.QueryHelpers
el paquete Microsoft.AspNetCore.WebUtilities .Si usa ASP.NET Core 3.0 o superior,
WebUtilities
ahora forma parte del SDK de ASP.NET y no requiere una referencia de paquete nuget separada.Para analizarlo en un diccionario:
Tenga
ParseQueryString
en 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.WebUtilities
lugar, 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
HttpRequest
tiene unaQuery
propiedad que expone la cadena de consulta analizada a través de laIReadableStringCollection
interfaz:Esta discusión sobre GitHub también lo apunta.
fuente
Esta función regresa
Dictionary<string, string>
y no se usaMicrosoft.xxx
por 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.WebUtilities
ha 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.2
fuente
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