2016-11-18 332 views
11

我在一个xamarin表单项目中使用HttpClientHttpClient会抛出哪些异常?

该类有文档记录,但我找不到任何关于它的方法可能抛出哪些异常的文档。

例如GetAsync方法没有关于可能的例外的任何文档。但我认为它会抛出,例如服务器无法访问时。

有什么地方可能会抛出异常列表?

+1

是的,在特定方法的文档中。你为什么想知道? – CodeCaster

+1

你得到一个'HttpResponseMessage',它具有属性'IsSuccessStatusCode'和'StatusCode',它可以是下列之一:https://msdn.microsoft.com/en-us/library/system.net.httpstatuscode(v=vs .118).aspx这是你在找什么? –

+0

@CodeCaster我找不到有关异常的任何文档(例如:https://msdn.microsoft.com/de-de/library/hh158944(v=vs.118).aspx)。我想知道,因为我想处理所有的例外情况。 – Nathan

回答

19

正如其他人所说的,它取决于你用HttpClient调用什么。我明白你的意思,所以这里是一些典型的方法调用抛出的异常。

SendAsync可以抛出:

  • ArgumentNullException请求为空。
  • InvalidOperationException请求消息已由HttpClient实例发送。
  • HttpRequestException由于基础问题(如网络连接,DNS故障,服务器证书 验证或超时),请求失败。

https://msdn.microsoft.com/en-us/library/hh138176(v=vs.110).aspx

同样GetAsyncPostAsyncPutAsyncGetStringAsyncGetStreamAsync等等可以抛出ArgumentNullExceptionHttpRequestException如上(但不InvalidOperationException)。

https://msdn.microsoft.com/en-us/library/hh158944(v=vs.110).aspx

一旦调用SendAsyncGetAsync等你将有一个Task<HttpResponseMessage>。一旦等待,如果返回不成功的HTTP状态码,我倾向于拨打EnsureSuccessStatusCode()以抛出HttpRequestExceptionhttps://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpResponseMessage.cs#L161

+10

它也可以t hrow'TaskCanceledException':https://stackoverflow.com/a/12901496/67824。 –