Sto utilizzando System.Net.WebClient
per eseguire alcune operazioni HTTP in modalità asincrona. La ragione per utilizzare operazioni asincrone è, sopra ogni altra cosa, il fatto che ottengo indicazioni di cambio di progresso - che è disponibile solo per le operazioni asincrone, come indicato da the docs.Ottieni intestazioni HTTP in richiesta asincrona WebClient
Quindi diciamo che ho la mia WebClient impostare:
this.client = new WebClient();
this.client.UploadStringCompleted +=
new UploadStringCompletedEventHandler(textUploadComplete);
e il delegato:
private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// trigger UI failure notification
return;
}
// FIXME not checking for response code == 200 (OK)
// trigger UI success notification
}
Quindi, vedete, sto assumendo che se nessuna eccezione è sollevata, le richieste erano sempre riuscito (il che potrebbe non essere il caso, dal momento che il codice di stato della risposta HTTP può essere! = 2xx). Dalla documentazione su UploadFileAsync non riesco a capire se viene elaborata anche una risposta non 200.
Sono davvero nuovo in C# e non riesco a trovare un modo per accedere alle intestazioni per quella particolare richiesta della richiesta asincrona. Mi sembra che ogni WebClient
possa contenere solo una risposta (o un set di intestazioni) in un dato momento.
Mentre non eseguirò più richieste parallele contemporaneamente, mi piacerebbe comunque sapere se c'è un modo più elegante di recuperare intestazioni di risposta/codice di stato di una particolare richiesta, piuttosto che dover ottenere la risposta "last-available" dallo WebClient
.
Grazie.
Sei in .NET 4.5? Se è così, prova a utilizzare gli overload di TaskAsync ... avresti comunque bisogno di accedere alle intestazioni dalla classe WebClient, ma non lo troverei affatto discutibile usando il flusso di lavoro TAP ... Sono d'accordo che ci si sente un po 'in errore nel farlo un gestore di eventi ordinario. 'attendi client.UploadStringTaskAsync (...); var headers = client.ResponseHeaders; ' – TCC