Scrivo codice C# 2.0 che deve eseguire GET e POST HTTP di base. Sto usando System.Net.HttpWebRequest per inviare entrambi i tipi di richiesta e System.Net.HttpWebResponse per riceverli entrambi. Il mio codice per GET si presenta come:Eccezioni non stop in C#
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("{0}?{1}",
URLToHit,
queryString));
request.Method = "GET";
request.Timeout = 1000; // set 1 sec. timeout
request.ProtocolVersion = HttpVersion.Version11; // use HTTP 1.1
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
catch(WebException e)
{
// If I do anything except swallow the exception here,
// I end up in some sort of endless loop in which the same WebException
// keeps being re-thrown by the GetResponse method. The exception is always
// right (ie: in cases when I'm not connected to a network, it gives a
// timed out error, etc...), but it should not be re-thrown!
}
E il mio codice POST è molto simile.
L'ultima riga funziona correttamente quando URLToHit restituisce uno stato HTTP 200, ma in qualsiasi altra circostanza (ad esempio: non 200 stato HTTP, nessuna connettività di rete, ecc.), Viene generata una System.Net.WebException (che è previsto, secondo i documenti MSDN). Tuttavia, il mio codice non progredisce mai oltre questa linea.
Quando si tenta di eseguire il debug di questo, non riesco a scavalcare o continuare oltre quell'ultima riga. Quando provo a farlo, la richiesta viene nuovamente emessa e l'eccezione viene ri-generata.
Qualche idea su cosa posso fare per fare una richiesta solo una volta? Non ho mai visto nulla di simile accadere in nessun codice basato su eccezioni, e sono fuori di idee. Nulla di simile accade in nessun'altra parte del mio codice, solo le parti che si occupano delle funzionalità e dei costrutti di System.Net.
Grazie!
(Aggiornamento: aggiunto try/catch attorno al metodo GetRequest)
per favore inserisci il try/catch attorno al codice che stai cercando – eglasius
Come parte - potresti trovare 'WebClient' più facile da usare di' HttpWebRequest'/'HttpWebResponse' - lo incapsula in metodi come' DownloadString' (GET) e 'UploadString' (POST). –
aggiunto il try/catch attorno al metodo GetRequest (che è quello che mi sta causando un problema). Ho provato di tutto, e l'unica cosa che risolve il mio problema è di ingoiare l'eccezione. Non riesco nemmeno a rilanciare una copia di WebException! Lo stesso problema con WebClient. – Aaron