Me gustaría analizar una cadena como p1=6&p2=7&p3=8
en un NameValueCollection
.
¿Cuál es la forma más elegante de hacer esto cuando no tienes acceso al Page.Request
objeto?
.net
parsing
query-string
Nathan Smith
fuente
fuente
HttpUtility.ParseQueryString
sería mi recomendación, excepto que en el caso de queHttpUtility.ParseQueryString("&X=1&X=2&X=3")
el resultado sea....X=1,2,3...
tener múltiples parámetros del mismo nombre es poco común pero necesario para admitir parámetros de controlador como int [], IEnumerable <int>, etc. (dichos parámetros podrían utilizarse para admitir varias casillas de verificación) consulte "Múltiples ocurrencias de la misma variable de cadena de consulta se consolidan en una entrada" según el sitio de MS . Una versión artesanal del método podría ser su única opciónHttpUtility.ParseQueryString funcionará mientras esté en una aplicación web o no le importe incluir una dependencia en System.Web. Otra forma de hacer esto es:
fuente
?foo=1&bar
.HttpUtility
lo analizaría como{ key = null, value = "bar" }
Muchas de las respuestas proporcionan ejemplos personalizados debido a la dependencia de la respuesta aceptada en System.Web . Desde el paquete Microsoft.AspNet.WebApi.Client NuGet hay un método UriExtensions.ParseQueryString , que también se puede usar:
Entonces, si desea evitar la dependencia de System.Web y no quiere usar la suya propia, esta es una buena opción.
fuente
Quería eliminar la dependencia de System.Web para poder analizar la cadena de consulta de una implementación de ClickOnce, al tiempo que los requisitos previos se limitaban al "Subconjunto de marcos solo para clientes".
Me gustó la respuesta de rp. Agregué algo de lógica adicional.
fuente
Necesitaba una función que sea un poco más versátil que la que ya se proporcionaba al trabajar con consultas OLSC.
Aquí está mi solución:
Puede que no sea una mala idea
<Extension()>
agregar eso también para agregar la capacidad a Uri.fuente
Para hacerlo sin
System.Web
, sin escribirlo usted mismo, y sin paquetes NuGet adicionales:System.Net.Http.Formatting
using System.Net.Http;
Usa este código:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
fuente
Si desea evitar la dependencia de System.Web que se requiere para usar HttpUtility.ParseQueryString , puede usar el
Uri
método de extensión que seParseQueryString
encuentra enSystem.Net.Http
.Asegúrese de agregar una referencia (si aún no lo ha hecho) a
System.Net.Http
su proyecto.Tenga en cuenta que debe convertir el cuerpo de la respuesta a válido
Uri
para queParseQueryString
(inSystem.Net.Http
) funcione.fuente
fuente
Me acabo de dar cuenta de que Web API Client tiene un
ParseQueryString
método de extensión que funciona enUri
ay devuelve unHttpValueCollection
:fuente
Simplemente acceda a Request.QueryString. AllKeys mencionado como otra respuesta solo te da una variedad de claves.
fuente
HttpUtility.ParseQueryString(Request.Url.Query)
return esHttpValueCollection
(clase interna). Hereda deNameValueCollection
.fuente
Si no desea la dependencia de System.Web, simplemente pegue este código fuente de la clase HttpUtility.
Acabo de mezclar esto del código fuente de Mono . Contiene HttpUtility y todas sus dependencias (como IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Entonces usar
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
fuente
Dado que todo el mundo parece estar pegando su solución ... aquí está la mía :-) Necesitaba esto desde una biblioteca de clase sin
System.Web
obtener los parámetros de identificación de los hipervínculos almacenados.Pensé en compartir porque encuentro esta solución más rápida y mejor.
Uso:
fuente
Acceda a Request.QueryString.Keys para una NameValueCollection de todos los parámetros de cadena de consulta.
fuente
Para obtener todos los valores de Querystring intente esto:
fuente
fuente
fuente
Traduzco a la versión C # de josh-brown en VB
fuente
Este es mi código, creo que es muy útil:
fuente