Eu tenho uma string no .NET que é realmente um URL. Eu quero uma maneira fácil de obter o valor de um parâmetro específico.
Normalmente, eu usaria apenas Request.Params["theThingIWant"]
, mas essa sequência não é da solicitação. Eu posso criar um novo Uri
item assim:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Posso usar myUri.Query
para obter a string de consulta ... mas, aparentemente, tenho que encontrar uma maneira regular de dividi-la.
Estou sentindo falta de algo óbvio ou não existe uma maneira de fazer isso sem criar um tipo de regex etc.?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
e ele extrairá o primeiro parâmetro. `HttpUtility.ParseQueryString(string)
! Como o próprio nome diz, é analisar Query Strings, não URLs com parâmetros de consulta. Se você quiser fazer isso, primeiro divida-o da?
seguinte forma:Url.Split('?')
e obtenha o último elemento usando (dependendo da situação e do que você precisa)[0]
ou LINQ'sLast()
/LastOrDefault()
.Provavelmente é isso que você quer
fonte
Aqui está outra alternativa se, por qualquer motivo, você não puder ou não quiser usar
HttpUtility.ParseQueryString()
.Isso é construído para ser um pouco tolerante a cadeias de consulta "malformadas", ou seja,
http://test/test.html?empty=
se torna um parâmetro com um valor vazio. O chamador pode verificar os parâmetros, se necessário.Teste
fonte
@Andrew and @CZFox
Eu tive o mesmo bug e achei a causa desse parâmetro, de fato:
http://www.example.com?param1
e nãoparam1
qual é o que se esperaria.Removendo todos os caracteres antes e incluindo o ponto de interrogação, esse problema é corrigido. Portanto, em essência, a
HttpUtility.ParseQueryString
função requer apenas um parâmetro válido de string de consulta contendo apenas caracteres após o ponto de interrogação, como em:Minha solução alternativa:
fonte
ParseQueryString
analisa cadeias de consulta.Parece que você deve fazer um loop sobre os valores de
myUri.Query
e analisá-lo a partir daí.No entanto, eu não usaria esse código sem testá-lo em vários URLs malformados. Pode quebrar em alguns / todos estes:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
fonte
Você pode usar a seguinte solução alternativa para que funcione também com o primeiro parâmetro:
fonte
Use o .NET Reflector para visualizar o
FillFromString
método deSystem.Web.HttpValueCollection
. Isso fornece o código que o ASP.NET está usando para preencher aRequest.QueryString
coleção.fonte
Ou, se você não souber o URL (para evitar a codificação, use o
AbsoluteUri
Exemplo ...
fonte
se você deseja obter sua página QueryString na página padrão, a página padrão significa o URL da página atual. você pode tentar este código:
fonte
Isso é realmente muito simples e funcionou para mim :)
fonte
Para quem deseja fazer um loop através de todas as seqüências de consulta de uma sequência
fonte
fonte
Eu usei e funcionou perfeitamente
fonte