Asp.net - vazio QueryString Parâmetro
-
03-07-2019 - |
Pergunta
O Problema
O que é a maneira correta para verificar se o parâmetro foo
na querystring o seguinte URL usando asp.net? Isto é mesmo possível?
http://example.com?bar=3&foo
Eu tentei Request["foo"]
verificação, bem como Request.QueryString["foo"]
e fico null
para ambos. Eu também tentei preencher um List
com os valores da coleção QueryString
mas como eu menciono abaixo, ele não inclui o valor.
A Pergunta ??h3>
Eu entendo que não há nenhum valor, mas não deve Request["foo"]
devolver uma cadeia vazia em vez de null
? Existe uma maneira de descobrir se uma chave querystring existe mesmo se ele não tem valor?
Notas
aqui que Request.QueryString.AllKeys
inclui null
para em branco querystring parâmetros.
[editar]
Como indicado abaixo por James e Dreas um Regex para analisar o url-prima pode ser a melhor abordagem (e possivelmente apenas).
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
Solução
Você pode usar null
como a chave para o NameValueCollection
e ele vai te dar uma lista delimitada por vírgulas de nomes de parâmetros que não têm valores.
Para http://example.com?bar=3&foo
você usaria Request.QueryString[null]
e seria recuperar foo
.
Se você tem mais de um nome de parâmetro sem um valor, ele vai te dar um valor que é delimitada por vírgulas.
Para http://example.com?bar=3&foo&test
você obteria foo,test
como um valor de volta.
Update:
Você pode realmente usar Request.QueryString.GetValues(null)
para obter os nomes dos parâmetros que não têm valores.
Outras dicas
Request.ServerVariables["QUERY_STRING"]
retornará a string de consulta, completo, como uma string. Em seguida, procure-lo usando um Regex ou IndexOf
Você começa nulo porque o parâmetro foo
não tem um valor com ele.
... Qual é o problema exatamente?
Se você ainda deseja verificar a sua existência (embora ela não tem um valor), tente algo como isto:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Dreas está correto. Variável "bar" tem um valor, mas foo não.
QueryString [ "bar"] retornará 3 porque tem o valor 3 associado à variável Bar. No entanto, Foo retornará nulo porque a sua não é valor e quando você está chamando QueryString em uma variável ou chave, você está consultando para o valor, não a chave, de modo que é por isso que você está retornando null.
string de consulta é provavelmente um desperdício. Se você usar Request.Params [ ""] ou iterate-lo, então você vai encontrar o seu desejado. Sua realmente acessível do que outras coisas.
Deixe-me saber se você precisar de alguma ajuda neste processo.