private async Task <T> HandleResponse <T>(HttpResponseMessage response) { Logger.Trace("HandleResponse StatusCode: {0} {1}", (int)response.StatusCode, response.StatusCode); if (!ResponseValidator.Invoke(response)) { return(default(T)); } var result = await response.Content.ReadAsStringAsync(); Logger.Trace("HandleResponse: returned={0}", result); var ret = JsonConvert.DeserializeObject <T>(result); Logger.Trace("HandleResponse[DeserializeObject]: type={0}", (ret == null ? S_NULL : ret.GetType().FullName)); return(ret); }
public async Task ExecuteAsync(Func <HttpRequestMessage> requestMessageFactory, IHttpExecutionContext context) { for (int retry = 0; retry <= MaxRetryCount; retry++) { var request = requestMessageFactory(); Logger.LogRequest(request); try { var response = await context.Invoker.SendAsync(request, context.CancellationToken); Logger.LogResponse(response); ResponseValidator?.Invoke(response); context.SuccessResult(response); break; } catch (OperationCanceledException) when(!context.CancellationToken.IsCancellationRequested) { context.TimeoutResult(); } catch (HttpRequestException ex) { Logger.LogRequestException(request, ex); context.ErrorResult(ex.Message); if (PostErrorDelay != TimeSpan.Zero) { await Task.Delay(PostErrorDelay); } } finally { request?.Dispose(); } } }
private static void validateResponse <T>(IRequest request, IResponse response, T data, ResponseValidator <T> validateResponse) => validateResponse?.Invoke(request, response, data);