private async Task <HttpResponseMessage> SendDefaultRequest(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var responseMessage = new HttpResponseMessage();

            Exception exception = null;

            var canDoRequest = await ConnectivityService.CanDoRequest(request);

            if (canDoRequest)
            {
                try
                {
                    responseMessage = await _httpMessageInvoker.SendAsync(request, cancellationToken);
                }
                catch (Exception ex)
                {
                    responseMessage.StatusCode = System.Net.HttpStatusCode.BadRequest;
                    exception = ex;
                }
            }
            else
            {
                responseMessage.StatusCode = System.Net.HttpStatusCode.BadGateway;
                exception = new ConnectivityException(request);
            }

            if (!responseMessage.IsSuccessStatusCode && exception != null)
            {
                throw exception;
            }

            return(responseMessage);
        }
Beispiel #2
0
        Task CheckConnectivity()
        {
            var connectivityService = App.Resolve <IConnectivityService> ();

            if (!connectivityService.IsNetworkAvailable)
            {
                var ex = new ConnectivityException("No Internet Connection");
                Exception = ex;
                throw ex;
            }

            return(Task.FromResult(false));
        }
Beispiel #3
0
        public void NetHttpConnectivityException_ImplementException()
        {
            var exceptionWithoutMessage = new ConnectivityException();

            exceptionWithoutMessage.Message.Should().Be("Exception of type 'Withywoods.Net.Http.Exceptions.ConnectivityException' was thrown.");
            exceptionWithoutMessage.InnerException.Should().BeNull();

            var exceptionWithMessage = new ConnectivityException("My first message");

            exceptionWithMessage.Message.Should().Be("My first message");
            exceptionWithMessage.InnerException.Should().BeNull();

            var exceptionWithInnerException = new ConnectivityException("My first message", new Exception("Inner exception"));

            exceptionWithInnerException.Message.Should().Be("My first message");
            exceptionWithInnerException.InnerException.Should().NotBeNull();
            exceptionWithInnerException.InnerException.Message.Should().Be("Inner exception");
        }
        private async Task <HttpResponseMessage> SendRequestOrGetFromCache(HttpRequestMessage request, int expireInSeconds, IApiCacheService cacheService, CancellationToken cancellationToken)
        {
            var responseMessage = new HttpResponseMessage();

            Exception exception = null;

            var canDoRequest = await ConnectivityService.CanDoRequest(request);

            if (canDoRequest)
            {
                try
                {
                    responseMessage = await _httpMessageInvoker.SendAsync(request, cancellationToken);
                }
                catch (Exception ex)
                {
                    responseMessage.StatusCode = System.Net.HttpStatusCode.BadRequest;
                    exception = ex;
                }
            }
            else
            {
                responseMessage.StatusCode = System.Net.HttpStatusCode.BadGateway;
                exception = new ConnectivityException(request);
            }

            if (responseMessage.IsSuccessStatusCode)
            {
                await cacheService.Add(request, responseMessage, TimeSpan.FromSeconds(expireInSeconds));
            }
            else
            {
                if (cacheService.TryGet(request, out var existResponseMessage))
                {
                    responseMessage = existResponseMessage;
                }
                else if (exception != null)
                {
                    throw exception;
                }
            }

            return(responseMessage);
        }