Tengo un conjunto de URL similares a las siguientes en una lista
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=en
He logrado obtener las cadenas de consulta con el siguiente código:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Pero solo devuelve los parámetros como id , servidor , ubicación , etc., según la URL proporcionada.
Lo que necesito es agregar / agregar valores a las cadenas de consulta existentes.
Por ejemplo con la URL:
http://somesite.com/backup/index.php?action=login&attempts=1
Necesito alterar los valores de los parámetros de la cadena de consulta:
action = login1
intentos = 11
Como puede ver, he agregado "1" para cada valor. Necesito obtener un conjunto de URL de una cadena con diferentes cadenas de consulta y agregar un valor a cada parámetro al final y nuevamente agregarlos a una lista.
fuente
HttpUtility.UrlEncode()
al asignar el valor del parámetro?HttpUtility.ParseQueryString
método devuelve una implementación especial de NameValueCollection que ya maneja esto detrás de escena cuando establece un valor.He incluido la respuesta de Darin en un método de extensión agradablemente reutilizable.
¡Espero que esto ayude!
fuente
Las respuestas proporcionadas tienen problemas con las URL relativas, como "/ some / path /". Esto es una limitación de la clase Uri y UriBuilder, que es bastante difícil de entender, ya que no veo ninguna razón por la cual las URL relativas sean problemáticas. cuando se trata de manipulación de consultas.
Aquí hay una solución alternativa que funciona tanto para rutas absolutas como relativas, escritas y probadas en .NET 4:
(pequeña nota: esto también debería funcionar en .NET 4.5, solo tendrá que cambiar
propInfo.GetValue(values, null)
apropInfo.GetValue(values)
)Y aquí hay un conjunto de pruebas unitarias para probar el comportamiento:
fuente
uri.AbsoluteUri
lugar deuri.ToString()
debido a los desagradables efectos de escape.uri.AbsoluteUri
tira, si el uri no es absoluto!Tenga en cuenta que puede agregar el
Microsoft.AspNetCore.WebUtilities
paquete nuget de Microsoft y luego usar esto para agregar valores a la cadena de consulta:fuente
AddQueryString
es que siempre agregará, si ya existe la clave, no se actualizará, pero creará claves duplicadas, es maloLa siguiente solución funciona para ASP.NET 5 (vNext) y utiliza la clase QueryHelpers para crear un URI con parámetros.
El resultado URI tendría
http://iberia.com?param1=value1¶m2=value2¶m3=value3
fuente
El final de todos los problemas de edición de cadenas de consulta de URL
Después de mucho trabajo y jugar con la clase Uri, y otras soluciones, aquí están mis métodos de extensión de cadena para resolver mis problemas.
fuente
string
s sin procesar para representar URL como esta, teniendo en cuenta que laUri
clase ya existe para ese propósito. Utilice eso o cree una nueva abstracción si faltan características.Me gusta la respuesta de Bjorn, sin embargo, la solución que ha proporcionado es engañosa, ya que el método actualiza un parámetro existente, en lugar de agregarlo si no existe. Para hacerlo un poco más seguro, lo he adaptado a continuación.
fuente
query[paramName] = paramValue;
en todos los casos. Si existe, será anulado. Si no existe, se creará la clave.Mi enfoque es muy simple, para principiantes:
fuente