ホーム>source

私は HttpRequestException を手渡しています   PostAsync を使用するとき  そしてそれはうまく動作しますが、 GetAsync で同じ例外を処理しようとしているとき   TaskCanceledException a task was cancelled をスローします  代わりに長いタイムアウトで。 GetAsync の作り方   HttpRequestException を投げる ?

 public async Task<bool> AddQrCodeToRequest(int projectId, int requestId, string code, string token)
    {
        var data = JsonConvert.SerializeObject(new { code });
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
        var content = new StringContent(data, Encoding.UTF8, "application/json");
        var result = await client.PostAsync(url, content);
        if (result.IsSuccessStatusCode)
        {
            return true;
        }
        else
        {
            throw new Exception(CreateExceptionDescription(await result.Content.ReadAsStringAsync()));
        }
    }
    public async Task<List<string>> GetUpdatedQrCodesList(Request request, string token)
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
        var result = await client.GetAsync(url);
        if (result.IsSuccessStatusCode)
        {
            var requestsJson = await result.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<List<string>>(requestsJson);
        }
        else
        {
            throw new Exception(CreateExceptionDescription(await result.Content.ReadAsStringAsync()));
        }
    }

取扱ポスト

try
{
     string QrCode = result.Text;
     if (await restService.AddQrCodeToRequest(Request, result.Text, Vars.User.Token))
     {
          QrCodes.Add(QrCode);
          await DisplayAlert("Code added", QrCode, "OK");
     }
 }
 catch (Exception ex)
 {
     if (ex is HttpRequestException)
     {
           //network ex handling
     }
     else
     {
           //other handling
     }
}

getの処理(タイムアウト後にアプリがクラッシュする)

       try
        {
            UpdatedQrCodes = await restService.GetUpdatedQrCodesList(Request, Vars.User.Token);
        }
        catch (Exception ex)
        {
            if (ex is HttpRequestException)
            {
                //never thrown
            }
            else
            {
                //never also thrown
            }
        }

あなたの答え
  • 解決した方法 # 1

    回避策として、nuget Plugin.Connectivityをインストールし、インターネットが利用可能かどうかGETチェックを実行する前に:

               if (!Plugin.Connectivity.CrossConnectivity.Current.IsConnected)
                {
                    // Connection not available
                    throw new Exception("Not connected.");
                }
    
    

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - 入力フォームに空白文字/スペースを許可しない