Eu configurei URLs semelhantes aos abaixo em uma lista
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=pt
Consegui obter as cadeias de consulta usando o seguinte código:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Mas ele retorna apenas os parâmetros como ID , servidor , local e assim por diante, com base na URL fornecida.
O que eu preciso é adicionar / acrescentar valores às seqüências de consulta existentes.
Por exemplo, com o URL:
http://somesite.com/backup/index.php?action=login&attempts=1
Preciso alterar os valores dos parâmetros da string de consulta:
action = login1
tentativas = 11
Como você pode ver, anexei "1" para cada valor. Preciso obter um conjunto de URLs de uma string com diferentes strings de consulta e adicionar um valor a cada parâmetro no final e adicioná-los novamente a uma lista.
fonte
HttpUtility.UrlEncode()
ao atribuir valor de parâmetro?HttpUtility.ParseQueryString
método retorna uma implementação especial de NameValueCollection que já lida com isso nos bastidores quando você define um valor.Eu envolvi a resposta de Darin em um método de extensão bem reutilizável.
Eu espero que isso ajude!
fonte
As respostas fornecidas têm problemas com os URLs relativos, como "/ some / path /" Essa é uma limitação da classe Uri e UriBuilder, que é bastante difícil de entender, pois não vejo nenhuma razão para que os URLs relativos sejam problemáticos quando se trata de manipulação de consultas.
Aqui está uma solução alternativa que funciona para caminhos absolutos e relativos, escritos e testados no .NET 4:
(observação: isso também deve funcionar no .NET 4.5, você precisará mudar apenas
propInfo.GetValue(values, null)
parapropInfo.GetValue(values)
)E aqui está um conjunto de testes de unidade para testar o comportamento:
fonte
uri.AbsoluteUri
não poruri.ToString()
causa de efeitos desagradáveis e inesgotáveis.uri.AbsoluteUri
joga, se o uri não for absoluto!Observe que você pode adicionar o
Microsoft.AspNetCore.WebUtilities
pacote nuget da Microsoft e usá-lo para acrescentar valores à string de consulta:fonte
AddQueryString
é que ele sempre adiciona, se já existe a chave, não é atualizado, mas cria chaves duplicadas, comA solução a seguir funciona para o ASP.NET 5 (vNext) e usa a classe QueryHelpers para criar um URI com parâmetros.
O resultado URI teria
http://iberia.com?param1=value1¶m2=value2¶m3=value3
fonte
O fim de todos os problemas de edição de cadeias de consulta de URL
Depois de muito trabalho e brincadeiras com a classe Uri e outras soluções, aqui estão meus métodos de extensão de string para resolver meus problemas.
fonte
string
s brutos para representar URLs como este, considerando que aUri
classe já existe para esse fim. Use isso ou crie uma nova abstração se houver recursos ausentes.Eu gosto da resposta de Bjorn, no entanto, a solução que ele forneceu é enganosa, pois o método atualiza um parâmetro existente, em vez de adicioná-lo se ele não existir. Para torná-lo um pouco mais seguro, eu o adaptei abaixo.
fonte
query[paramName] = paramValue;
em todos os casos. Ele existe, será substituído. Se não existir, a chave será criada.Minha abordagem é muito simples, para iniciantes:
fonte