Me gustaría analizar una cadena como p1=6&p2=7&p3=8en un NameValueCollection.
¿Cuál es la forma más elegante de hacer esto cuando no tienes acceso al Page.Requestobjeto?
.net
parsing
query-string
Nathan Smith
fuente
fuente

HttpUtility.ParseQueryStringserí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.HttpUtilitylo 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.Formattingusing 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
Urimétodo de extensión que seParseQueryStringencuentra enSystem.Net.Http.Asegúrese de agregar una referencia (si aún no lo ha hecho) a
System.Net.Httpsu proyecto.Tenga en cuenta que debe convertir el cuerpo de la respuesta a válido
Uripara queParseQueryString(inSystem.Net.Http) funcione.fuente
fuente
Me acabo de dar cuenta de que Web API Client tiene un
ParseQueryStringmétodo de extensión que funciona enUriay 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.Webobtener 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