HttpClient - traitant de l'agrégat des exceptions
Salut, je suis en utilisant HttpClient similaire à ceci:
public static Task<string> AsyncStringRequest(string url, string contentType)
{
try
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(contentType));
return client.GetStringAsync(url).ContinueWith(task => {
return task.Result;
});
}
catch (AggregateException ex)
{
throw ex;
}
catch (WebException ex)
{
throw ex;
}
catch (Exception ex)
{
throw ex;
}
}
Mais je vais avoir des difficultés à traiter les exceptions. J'ai ajouté le supplément de blocs catch juste pour l'essayer et l'étape de projection, mais aucun des points de rupture sont pris dans un des blocs catch. Je me rends compte à l'aide de la Tâche à l'exception peut se produire sur un autre thread que l'appelant si l'exception est enveloppé dans un agrégat contenant, mais je ne suis pas sûr de ce que la meilleure façon de faire face à ces exceptions.
Par exemple je fais une demande à un service web et spécifiques à un paramètre non valide dans la demande, et qu'une exception est levée. Je veux m'en mesure de rattraper le total des exceptions et de regarder la innerexceptions de savoir pourquoi la demande a échoué et renvoyer un message amical.
Donc ma question est, quelle est la meilleure façon de capter l'ensemble des exceptions et de traiter avec eux?
OriginalL'auteur gdp | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
L'exception est levée par
tâche.Résultat
:Mieux: vérifier si la tâche faillés avant d'accéder à
tâche.Résultat
:Si vous n'êtes pas réellement en train de faire quelque chose dans le
ContinueWith
, vous pouvez simplement l'omettre:Je sais que c'est une vieille question, mais est-il possible d'obtenir le code d'état http de la aggregateexception, comme vous pouvez lors de la capture d'un webexception?
Oui, vous pouvez appeler le .Aplatir sur le AggregateException et ensuite accéder à la InnerExceptions propriété et tirez le WebException.
OriginalL'auteur dtb