2016-11-18 74 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。 –