c# - httpclient异常处理
问题描述
我在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
}
}
处理获取(超时后应用程序崩溃)
try
{
UpdatedQrCodes = await restService.GetUpdatedQrCodesList(Request, Vars.User.Token);
}
catch (Exception ex)
{
if (ex is HttpRequestException)
{
//never thrown
}
else
{
//never also thrown
}
}
解决方案
作为一种解决方法,使用 nugetXamarin.Essentials
并在执行 GET 之前检查是否有可用的互联网:
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
// Connection to internet is available
}
推荐阅读
- continuous-integration - 修改 Bamboo 发布元数据
- python-3.x - 我有一个文本内容很长的数据框,我希望将其保存为表格(以 .PNG 格式),但文本被裁剪掉了
- html - 移动设备上的引导水平折叠子菜单
- angular - 从远程数据创建和检查 Angular 反应式复选框
- spring-mvc - Thymeleaf 表单返回空到控制器
- python-3.x - numba vectorize 中的 ValueError 用于累积
- javascript - 如何禁用primefaces中tab键的默认功能
- python - 如何更改熊猫数据框中的文本颜色
- reactjs - 获取滚动位置并自动滚动material-ui表
- javascript - 显示/隐藏完整的 div