Asp.net - Vaciar Parámetro QueryString
-
03-07-2019 - |
Pregunta
El problema
¿Cuál es la forma correcta de verificar el parámetro foo
en la siguiente cadena de consulta de url usando asp.net? ¿Es esto posible?
http://example.com?bar=3&foo
He intentado comprobar Request [" foo "]
, así como Request.QueryString [" foo "]
y obtengo null
para ambos. También he intentado rellenar una List
con los valores de la colección QueryString
, pero como menciono a continuación, no incluye el valor.
La pregunta
Entiendo que no hay ningún valor, pero ¿no debería Request [" foo "]
devolver una cadena vacía en lugar de null
? ¿Hay alguna forma de averiguar si existe una clave de cadena de consulta incluso si no tiene ningún valor?
Notas
Encontré aquí esa solicitud. QueryString.AllKeys
incluye null
para los parámetros de la cadena de consulta en blanco.
[editar]
Como se indica a continuación por James y Dreas a Regex para analizar la url sin procesar podría ser el mejor (y posiblemente el único) enfoque.
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
Solución
Puede usar null
como la clave para NameValueCollection
y le dará una lista delimitada por comas de nombres de parámetros que no tienen valores.
Para http://example.com?bar=3&foo
usaría Request.QueryString [null]
y recuperaría foo .
Si tiene más de un nombre de parámetro sin un valor, le dará un valor que está delimitado por comas.
Para http://example.com?bar=3&foo&test
obtendría foo, test
como valor de devolución.
Actualización :
Puede usar Request.QueryString.GetValues ??(null)
para obtener los nombres de los parámetros que no tienen valores.
Otros consejos
Request.ServerVariables [" QUERY_STRING "]
devolverá la cadena de consulta, completa, como una cadena. Luego búscalo usando un Regex o IndexOf
Obtienes un valor nulo porque el parámetro foo
no tiene un valor con él.
... ¿Cuál es el problema exactamente?
Si aún desea verificar su existencia (aunque carece de un valor), intente algo como esto:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Dreas es correcto. Variable " barra " tiene un valor pero foo no.
QueryString [" Bar "] devolverá 3 porque tiene el valor 3 asociado con la barra variable. Sin embargo, Foo devolverá el valor nulo porque no tiene ningún valor y cuando llama a QueryString en una variable o clave, está consultando el valor, no la clave, por lo que está devolviendo el valor nulo.
la cadena de consulta es probablemente una pérdida de tiempo. Si usa Request.Params [" "] o itérelo, encontrará el deseado. Es realmente útil que otras cosas.
Avísame si necesitas ayuda con esto.