У меня есть следующий код:Необработанное исключение в Xamarin Android При использовании HttpWebResponse
public async Task<List<RobotViewModel>> GetBot(string token)
{
var menulist = new List<RobotViewModel>();
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("mysite/bot/abc/process/GetBot");
request.Accept = "application/json";
request.Method = "GET";
request.Headers["Authorization"] = "Bearer " + token;
var response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false);
if(response.StatusCode==HttpStatusCode.OK)
{
var encoding = ASCIIEncoding.UTF8;
using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
{
string responseText = reader.ReadToEnd();
menulist = JsonConvert.DeserializeObject<List<RobotViewModel>>(responseText);
}
}
}
catch(System.Net.WebException exc)
{
var response = (HttpWebResponse)exc.Response;
switch(response.StatusCode)
{
case HttpStatusCode.InternalServerError:
{
_userRepo = await new Repository<User>().MakeDatabaseAsync();
var user = await _userRepo.Table.Where(p => p.LoggedIn).FirstOrDefaultAsync();
await Login(user.UserName, user.Password);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("mysite/bot/abc/process/GetBot");
request.Accept = "application/json";
request.Method = "GET";
request.Headers["Authorization"] = "Bearer " + user.AccessToken;
response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.OK)
{
var encoding = ASCIIEncoding.UTF8;
using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
{
string responseText = reader.ReadToEnd();
menulist = JsonConvert.DeserializeObject<List<RobotViewModel>>(responseText);
}
}
break;
}
default:
throw;
}
}
catch(Exception exc)
{
}
return menulist;
}
этот код используется в делегатом:
navigationView.NavigationItemSelected += async delegate
{
AndHUD.Shared.Show(this, "Please Wait", -1, AndroidHUD.MaskType.Clear);
var botList = await client.GetBot(loggedInUser.AccessToken);
if (botList.Count > 0)
{
var botListMemory = await _botRepo.GetAllAsync();
foreach (var item in botList)
{
var bot =await _botRepo.Table.Where(p => p.Token == item.Token).FirstOrDefaultAsync();
if(bot==null)
await _botRepo.CreateAsync(new Robot
{
Name = item.Name,
Token = item.Token,
TokenUrl = item.TokenUrl,
UserId = loggedInUser.Id,
Description = item.Description
});
else
{
bot.Name = item.Name;
bot.Token = item.Token;
bot.TokenUrl = item.TokenUrl;
bot.UserId = loggedInUser.Id;
bot.Description = item.Description;
await _botRepo.UpdateAsync(bot);
}
}
AndHUD.Shared.ShowSuccess(this, "Success", MaskType.Clear, TimeSpan.FromSeconds(2));
}
else
AndHUD.Shared.ShowError(this, "Server Error", MaskType.Clear, TimeSpan.FromSeconds(2));
SetData(botList, out myAdapter);
expandableListView.SetAdapter(myAdapter);
};
Когда Bearer маркер истек блок улова бросает необработанное исключение. при повторном запуске программы все отлично работает, потому что в предыдущем запуске приложения в блоке catch был создан новый токен Bearer.
Какое исключение выбрасывается? В вашем блоке catch есть много кода, который может вызвать исключение. –
После этой строки кода: response = (HttpWebResponse) ожидает запрос.GetResponseAsync(). ConfigureAwait (false); –
Да, но какой тип исключения? –