2011-12-30 9 views
51

Ho una pagina error.aspx. Se un utente accede a quella pagina, recupererà il percorso dell'errore nell'URL del metodo utilizzando Request.QueryString["aspxerrorpath"] e funziona correttamente.Come verificare che Request.QueryString abbia un valore specifico o non in ASP.NET?

Ma se un utente accede direttamente a quella pagina, genererà un'eccezione perché aspxerrorpath non è presente.

Come posso verificare che aspxerrorpath ci sia o no?

+0

Ho anche provato a utilizzare Request.QueryString.Count! = 0 ma il problema è che se l'utente annette qualcosa come? Abc = 1223, di nuovo darà l'eccezione – Peeyush

+0

'Request.QueryString.Count! = 0' dirà semplicemente tu se ci sono _no_ parametri a tutti. – Oded

risposta

83

Si può solo verificare la presenza di null:

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

grazie funziona, l'ho provato in precedenza ma quella volta non funzionava, ma ora funziona ... potrebbe essermi perso qualcosa in quel momento. :-) – Peeyush

+3

@Peeyush Probabilmente troverai che stai provando a lanciarlo su un '.ToString() 'e quindi stavano provando a trasmettere un valore null a un valore di valore stringa prima di testare il valore null stesso. È un errore comune. –

+0

Si noti che questo non riuscirà a controllare se una chiave è presente in QueryString quando non ha un valore. –

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

tornerà se c'è un valore

35

Controllare il valore del parametro:

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

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

Se lo fa non esiste, il valore sarà null, se esiste, ma non ha val ue set sarà una stringa vuota.

Credo che quanto sopra soddisferà le vostre esigenze meglio di un semplice test per null, poiché una stringa vuota è altrettanto negativa per la vostra situazione specifica.

+1

E se .NET == 4.0? Usa 'IsNullOrWhiteSpace'? – Chris

+0

se .NET == 4.0? Usa IsNullOrWhiteSpace –

1

Per risolvere il problema, scrivere la seguente riga nel metodo Page_Load della propria pagina.

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

.Net 4.0 fornisce più sguardo più attento a null, vuoto o stringhe separate da spazi, usarlo come mostrato nella seguente riga:

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

Questo non eseguire i successivi bilanci (i vostri logiche di business) se la stringa di query non ha aspxerrorpath.

6

Si può anche provare:

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

Per verificare la presenza di un QueryString vuoto si dovrebbe usare Request.QueryString.HasKeys proprietà.

Per verificare se la chiave è presente: Request.QueryString.AllKeys.Contains()

Quindi è possibile ottenere il valore di ist e fare tutte le altre verifiche che si desidera, come ad esempio IsNullOrEmpty, ecc

+1

'Request.QueryString.AllKeys.Contains()' restituirà effettivamente false quando la chiave è presente ma non ha alcun valore. –

3

Che dire di un approccio più diretto?

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

pensano che il controllo che stai cercando è questo:

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

ritorna null perché in quella stringa di query non ha alcun valore per quella chiave.

+0

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

Problemi correlati