Это не относится к ксамарину, это вопрос абстракции в OOP. Вы можете и должны абстрагировать HttpClient и его методы, чтобы удалить весь шаблон.
Пример - GetAsync<T>(url)
проверит соединение, запрос формы добавляет необходимые заголовки, ожидает ответа, проверяет статус ответа, читает ответ и, наконец, возвращает десериализованный ответ. Таким образом, если вы хотите добавить слой кэширования, это проще. Basi c OOP.
Абстрагирование вашего кода:
public async Task<T> GetAsync(string url)
{
try
{
if (!CrossConnectivity.Current.IsConnected)
{
// throw custom exception?
new NoNetworkException();
}
var token = DependencyService.Get<ISharedFunctions>().GetAccessToken();
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
var response = await client.GetAsync(url);
if (!response.IsSuccessStatusCode)
{
// read response and throw for logging?
new InvaidResponseException();// custom exceptions makes it easier for catching
}
using (Stream responseStream = await response.Content.ReadAsStreamAsync())
{
// there should be an async overload to read too
var jsonMessage = new StreamReader(responseStream).ReadToEnd();
return JsonConvert.DeserializeObject<T>(jsonMessage);
}
}
catch(NoNetworkException ex)
{
// handle
}
catch(InvaidResponseException ex)
{
// handle
}
}