async Task IHttpHandler.OnSent(HttpSentContext context) { Settings.ResultInspector = cacheEntry => ((HttpResponseMessage)cacheEntry.Value).RequestMessage = context.Result.RequestMessage; var response = context.Result; await TryGetRevalidatedResult(context, context.Request, context.Result); // if we just retrieved a response from cache // dispose of the revalidation result if (context.Result != response) { ObjectHelpers.Dispose(response); } await TryCacheResult(context, context.Result, context.Request, context.Result); }
private ICacheContext CreateContextForHttpResponse(Uri uri, HttpResponseMessage response, string accept = "application/json") { var request = new MockHttpRequestMessage() { RequestUri = uri, }; request.Headers.Accept.ParseAdd(accept); response.RequestMessage = request; var cacheSettings = new CacheSettings(); var settings = new HttpBuilderSettings(cacheSettings, null, null); settings.UriBuilder.Uri = uri; var httpBuilderContext = new HttpBuilderContext(settings); var handlerContext = new HttpSentContext(httpBuilderContext, request, response); return(new CacheContext(cacheSettings, handlerContext)); }
private async Task <HttpResponseMessage> ResultFromRequestAsync(IHttpBuilderContext context, HttpRequestMessage request, CancellationToken token) { ExceptionDispatchInfo capturedException = null; HttpResponseMessage response = null; try { var sendingContext = new HttpSendingContext(context, request); token.ThrowIfCancellationRequested(); await context.HandlerRegister.OnSending(sendingContext); if (sendingContext.Result != null) { response = sendingContext.Result; } else { token.ThrowIfCancellationRequested(); using (var client = _clientBuilder.Build()) response = await client.SendAsync(request, context.CompletionOption, token); } if (!context.IsSuccessfulResponse(response) && context.ExceptionFactory != null) { var ex = context.ExceptionFactory(response, request); if (ex != null) { throw ex; } } var sentContext = new HttpSentContext(context, request, response); token.ThrowIfCancellationRequested(); await context.HandlerRegister.OnSent(sentContext); response = sentContext.Result; } catch (Exception ex) { capturedException = ExceptionDispatchInfo.Capture(ex); } if (capturedException != null) { var exContext = new HttpExceptionContext(context, response, capturedException.SourceException); await context.HandlerRegister.OnException(exContext); if (!exContext.ExceptionHandled) { capturedException.Throw(); } } return(response); }