Eu gostaria de analisar uma string como p1=6&p2=7&p3=8
em a NameValueCollection
.
Qual é a maneira mais elegante de fazer isso quando você não tem acesso ao Page.Request
objeto?
.net
parsing
query-string
Nathan Smith
fonte
fonte
HttpUtility.ParseQueryString
seria minha recomendação, exceto que, no caso doHttpUtility.ParseQueryString("&X=1&X=2&X=3")
resultado,....X=1,2,3...
Ter vários parâmetros do mesmo nome é incomum, mas necessário para suportar parâmetros do controlador como int [], IEnumerable <int> etc. (esses parâmetros podem ser usados para suportar várias caixas de seleção) consulte "Várias ocorrências da mesma variável de cadeia de consulta são consolidadas em uma entrada", conforme o site da MS . Uma versão artesanal do método pode ser sua única opçãoO HttpUtility.ParseQueryString funcionará desde que você esteja em um aplicativo Web ou não se importe de incluir uma dependência no System.Web. Outra maneira de fazer isso é:
fonte
?foo=1&bar
.HttpUtility
analisaria como{ key = null, value = "bar" }
Muitas das respostas estão fornecendo exemplos personalizados devido à dependência da resposta aceita no System.Web . Do Microsoft.AspNet.WebApi.Client pacote NuGet há uma UriExtensions.ParseQueryString , método que também pode ser usado:
Portanto, se você deseja evitar a dependência System.Web e não deseja criar sua própria, essa é uma boa opção.
fonte
Eu queria remover a dependência do System.Web para poder analisar a sequência de consultas de uma implantação do ClickOnce, mantendo os pré-requisitos limitados ao "Subconjunto da estrutura do cliente apenas".
Eu gostei da resposta do rp. Eu adicionei alguma lógica adicional.
fonte
Eu precisava de uma função que seja um pouco mais versátil do que a que já foi fornecida ao trabalhar com consultas OLSC.
Aqui está a minha solução:
Pode não ser uma má idéia abordar
<Extension()>
isso também para adicionar a capacidade ao próprio Uri.fonte
Para fazer isso sem
System.Web
, sem você mesmo escrever e sem pacotes NuGet adicionais:System.Net.Http.Formatting
using System.Net.Http;
Use este código:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
fonte
Se você quiser evitar a dependência de System.Web que é necessário para usar HttpUtility.ParseQueryString , você poderia usar o
Uri
método de extensãoParseQueryString
encontrada emSystem.Net.Http
.Certifique-se de adicionar uma referência (se ainda não o fez) ao
System.Net.Http
seu projeto.Observe que você precisa converter o corpo da resposta em um válido
Uri
para queParseQueryString
(inSystem.Net.Http
) funcione.fonte
fonte
Acabei de perceber que o Web API Client tem um
ParseQueryString
método de extensão que funciona em umUri
e retorna umHttpValueCollection
:fonte
Basta acessar Request.QueryString. AllKeys mencionadas como outra resposta apenas fornece uma variedade de chaves.
fonte
HttpUtility.ParseQueryString(Request.Url.Query)
return éHttpValueCollection
(classe interna). Herda deNameValueCollection
.fonte
Se você não deseja a dependência System.Web, basta colar este código-fonte da classe HttpUtility.
Acabei de juntar isso a partir do código fonte do Mono . Ele contém o HttpUtility e todas as suas dependências (como IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Então use
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
fonte
Como todo mundo parece estar colando sua solução ... aqui está a minha :-) Eu precisava disso dentro de uma biblioteca de classes sem
System.Web
buscar parâmetros de identificação dos hiperlinks armazenados.Pensei em compartilhar porque acho essa solução mais rápida e com melhor aparência.
Uso:
fonte
Ative Request.QueryString.Keys para um NameValueCollection de todos os parâmetros de seqüência de caracteres de consulta.
fonte
Para obter todos os valores de consulta, tente o seguinte:
fonte
fonte
fonte
Eu traduzo para a versão c # de josh-brown no VB
fonte
Este é o meu código, acho muito útil:
fonte