2011-12-30 15 views
51

Tengo una página de error.aspx. Si un usuario llega a esa página, obtendrá la ruta de error en el page_load() URL del método usando Request.QueryString["aspxerrorpath"] y funciona bien.¿Cómo comprobar que Request.QueryString tiene un valor específico o no en ASP.NET?

Pero si un usuario accede directamente a esa página, generará una excepción porque aspxerrorpath no está allí.

¿Cómo puedo verificar que aspxerrorpath esté allí o no?

+0

también intenté usar Request.QueryString.Count! = 0 pero entonces el problema es si el usuario adjunta algo como? Abc = 1223 entonces otra vez dará la excepción – Peeyush

+0

'Request.QueryString.Count! = 0' simplemente dirá si hay _no_ parámetros en absoluto. – Oded

Respuesta

83

Usted sólo puede comprobar si hay null:

if(Request.QueryString["aspxerrorpath"]!=null) 
{ 
    //your code that depends on aspxerrorpath here 
} 
+0

gracias, funcioné, lo intenté anteriormente, pero esa vez no funcionó, pero ahora está funcionando ... puede ser que haya estado perdiendo algo esa vez. :-) – Peeyush

+3

@Peeyush Probablemente descubrirá que estaba tratando de convertirlo en un '.ToString() 'y, por lo tanto, estaban intentando convertir un valor nulo en un valor de cadena antes de probar el valor nulo en sí. Es un error común. –

+0

Tenga en cuenta que esto no podrá verificar si una clave está presente en QueryString cuando no tiene un valor. –

7
string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]) //true -> there is no value 

volverá si hay un valor

35

cheque por el valor del parámetro:

// .NET < 4.0 
if (string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"])) 
{ 
// not there! 
} 

// .NET >= 4.0 
if (string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"])) 
{ 
// not there! 
} 

Si lo hace no existe, el valor será null, si existe, pero no tiene val Si se establece, será una cadena vacía.

Creo que lo anterior se adaptará mejor a sus necesidades que solo una prueba para null, ya que una cadena vacía es igual de mala para su situación específica.

+1

¿Y qué pasa si .NET == 4.0? Use 'IsNullOrWhiteSpace'? – Chris

+0

if .NET == 4.0? Use IsNullOrWhiteSpace –

1

Para resolver su problema, escriba la siguiente línea en el método Page_Load de su página.

if (String.IsNullOrEmpty(Request.QueryString["aspxerrorpath"])) return; 

.Net 4.0 proporciona más mirada más cercana a nula, vacía o cadenas de espacios en blanco, lo utilizan como se muestra en la siguiente línea:

if(string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"])) return; 

Esto no va a funcionar sus próximas declaraciones (su lógica de negocio) si la cadena de consulta no tiene aspxerrorpath.

6

También puede probar:

if (!Request.QueryString.AllKeys.Contains("aspxerrorpath")) 
    return; 
8

para comprobar si hay una cadena de consulta vacío se debe utilizar Request.QueryString.HasKeys propiedad.

Para comprobar si la clave está presente: Request.QueryString.AllKeys.Contains()

A continuación, puede obtener el valor de ist y hacer cualquier otra comprobación que se desee, como isNullOrEmpty, etc.

+1

'Request.QueryString.AllKeys.Contains()' realmente devolverá false cuando la clave está presente pero no tiene ningún valor. –

3

¿Qué pasa con un enfoque más directo?

if (Request.QueryString.AllKeys.Contains("mykey") 
1

piensan que el cheque que está buscando es la siguiente:

if(Request.QueryString["query"] != null) 

Se devuelve null porque en esa cadena de consulta no tiene ningún valor para esa tecla.

+0

Request.QueryString.GetValues ​​(null) .Contains ("consulta") – user5690126

Cuestiones relacionadas