catch WebExceptions during API calls

This commit is contained in:
Kyle Spearrin 2016-08-06 19:33:04 -04:00
parent 98ceaba5f5
commit fe1545fbdf
7 changed files with 218 additions and 92 deletions

View file

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Bit.App.Abstractions; using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -30,13 +31,20 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/register")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/register")),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync(response);
}
return ApiResult.Success(response.StatusCode); return ApiResult.Success(response.StatusCode);
}
catch(WebException)
{
return HandledWebException();
}
} }
} }
@ -55,13 +63,20 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/password-hint")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/password-hint")),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync(response);
}
return ApiResult.Success(response.StatusCode); return ApiResult.Success(response.StatusCode);
}
catch(WebException)
{
return HandledWebException();
}
} }
} }
} }

View file

@ -6,6 +6,7 @@ using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Newtonsoft.Json; using Newtonsoft.Json;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -33,15 +34,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<TResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<TResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent);
return ApiResult<TResponse>.Success(responseObj, response.StatusCode); return ApiResult<TResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<TResponse>();
}
} }
} }
@ -60,15 +68,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, ApiRoute), RequestUri = new Uri(client.BaseAddress, ApiRoute),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<ListResponse<TResponse>>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<ListResponse<TResponse>>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<ListResponse<TResponse>>(responseContent); var responseObj = JsonConvert.DeserializeObject<ListResponse<TResponse>>(responseContent);
return ApiResult<ListResponse<TResponse>>.Success(responseObj, response.StatusCode); return ApiResult<ListResponse<TResponse>>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<ListResponse<TResponse>>();
}
} }
} }
@ -87,15 +102,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, ApiRoute), RequestUri = new Uri(client.BaseAddress, ApiRoute),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<TResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<TResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent);
return ApiResult<TResponse>.Success(responseObj, response.StatusCode); return ApiResult<TResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<TResponse>();
}
} }
} }
@ -114,15 +136,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<TResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<TResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<TResponse>(responseContent);
return ApiResult<TResponse>.Success(responseObj, response.StatusCode); return ApiResult<TResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<TResponse>();
}
} }
} }
@ -141,13 +170,20 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync(response);
}
return ApiResult.Success(response.StatusCode); return ApiResult.Success(response.StatusCode);
}
catch(WebException)
{
return HandledWebException();
}
} }
} }
} }

View file

@ -5,6 +5,7 @@ using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Newtonsoft.Json; using Newtonsoft.Json;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -31,15 +32,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/token")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/token")),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<TokenResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<TokenResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<TokenResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<TokenResponse>(responseContent);
return ApiResult<TokenResponse>.Success(responseObj, response.StatusCode); return ApiResult<TokenResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<TokenResponse>();
}
} }
} }
@ -58,15 +66,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/token/two-factor")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/token/two-factor")),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<TokenResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<TokenResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<TokenResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<TokenResponse>(responseContent);
return ApiResult<TokenResponse>.Success(responseObj, response.StatusCode); return ApiResult<TokenResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<TokenResponse>();
}
} }
} }
} }

View file

@ -28,6 +28,16 @@ namespace Bit.App.Repositories
return ApiResult<T>.Failed(System.Net.HttpStatusCode.RequestTimeout, new ApiError { Message = "Not connected to the internet." }); return ApiResult<T>.Failed(System.Net.HttpStatusCode.RequestTimeout, new ApiError { Message = "Not connected to the internet." });
} }
protected ApiResult HandledWebException()
{
return ApiResult.Failed(System.Net.HttpStatusCode.BadGateway, new ApiError { Message = "There is a problem connecting to the server." });
}
protected ApiResult<T> HandledWebException<T>()
{
return ApiResult<T>.Failed(System.Net.HttpStatusCode.BadGateway, new ApiError { Message = "There is a problem connecting to the server." });
}
protected async Task<ApiResult<T>> HandleErrorAsync<T>(HttpResponseMessage response) protected async Task<ApiResult<T>> HandleErrorAsync<T>(HttpResponseMessage response)
{ {
try try

View file

@ -6,6 +6,7 @@ using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Newtonsoft.Json; using Newtonsoft.Json;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -32,15 +33,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/", id)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<CipherResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<CipherResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<CipherResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<CipherResponse>(responseContent);
return ApiResult<CipherResponse>.Success(responseObj, response.StatusCode); return ApiResult<CipherResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<CipherResponse>();
}
} }
} }
@ -59,15 +67,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, ApiRoute), RequestUri = new Uri(client.BaseAddress, ApiRoute),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<ListResponse<CipherResponse>>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<ListResponse<CipherResponse>>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<ListResponse<CipherResponse>>(responseContent); var responseObj = JsonConvert.DeserializeObject<ListResponse<CipherResponse>>(responseContent);
return ApiResult<ListResponse<CipherResponse>>.Success(responseObj, response.StatusCode); return ApiResult<ListResponse<CipherResponse>>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<ListResponse<CipherResponse>>();
}
} }
} }
@ -86,15 +101,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/history", "?since=", since)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/history", "?since=", since)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<CipherHistoryResponse>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<CipherHistoryResponse>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<CipherHistoryResponse>(responseContent); var responseObj = JsonConvert.DeserializeObject<CipherHistoryResponse>(responseContent);
return ApiResult<CipherHistoryResponse>.Success(responseObj, response.StatusCode); return ApiResult<CipherHistoryResponse>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<CipherHistoryResponse>();
}
} }
} }
} }

View file

@ -5,6 +5,7 @@ using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Newtonsoft.Json; using Newtonsoft.Json;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -31,13 +32,20 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/identifier/", identifier, "/token")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/identifier/", identifier, "/token")),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync(response);
}
return ApiResult.Success(response.StatusCode); return ApiResult.Success(response.StatusCode);
}
catch(WebException)
{
return HandledWebException();
}
} }
} }
@ -56,8 +64,20 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/identifier/", identifier, "/clear-token")), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "/identifier/", identifier, "/clear-token")),
}; };
var response = await client.SendAsync(requestMessage); try
return ApiResult.Success(response.StatusCode); {
var response = await client.SendAsync(requestMessage);
if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync(response);
}
return ApiResult.Success(response.StatusCode);
}
catch(WebException)
{
return HandledWebException();
}
} }
} }
} }

View file

@ -6,6 +6,7 @@ using Bit.App.Abstractions;
using Bit.App.Models.Api; using Bit.App.Models.Api;
using Newtonsoft.Json; using Newtonsoft.Json;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Net;
namespace Bit.App.Repositories namespace Bit.App.Repositories
{ {
@ -32,15 +33,22 @@ namespace Bit.App.Repositories
RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "?since=", since)), RequestUri = new Uri(client.BaseAddress, string.Concat(ApiRoute, "?since=", since)),
}; };
var response = await client.SendAsync(requestMessage); try
if(!response.IsSuccessStatusCode)
{ {
return await HandleErrorAsync<ListResponse<FolderResponse>>(response); var response = await client.SendAsync(requestMessage);
} if(!response.IsSuccessStatusCode)
{
return await HandleErrorAsync<ListResponse<FolderResponse>>(response);
}
var responseContent = await response.Content.ReadAsStringAsync(); var responseContent = await response.Content.ReadAsStringAsync();
var responseObj = JsonConvert.DeserializeObject<ListResponse<FolderResponse>>(responseContent); var responseObj = JsonConvert.DeserializeObject<ListResponse<FolderResponse>>(responseContent);
return ApiResult<ListResponse<FolderResponse>>.Success(responseObj, response.StatusCode); return ApiResult<ListResponse<FolderResponse>>.Success(responseObj, response.StatusCode);
}
catch(WebException)
{
return HandledWebException<ListResponse<FolderResponse>>();
}
} }
} }
} }