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([&=]|$)")
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top