public async Task Invoke(HttpContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.Response.StatusCode == 304 || context.Request.Headers.ContainsKey("X-Esi")) { await _next(context); return; } var executionContext = new EsiExecutionContext( context.Request.Headers.ToDictionary(), context.Request.GetVariablesFromContext()); var pageUri = context.Request.GetPageUri(); var(found, cachedResponse) = await _cache.TryGet <FragmentPageResponse>(pageUri, executionContext); IEsiFragment fragment; if (found) { context.Response.CopyHeaders(cachedResponse.Headers); fragment = cachedResponse.Fragment; } else { var acceptEncoding = context.Request.Headers[HeaderNames.AcceptEncoding]; context.Request.Headers[HeaderNames.AcceptEncoding] = StringValues.Empty; var body = await _next.TryIntercept(context); context.Request.Headers[HeaderNames.AcceptEncoding] = acceptEncoding; if (body == null) { return; } fragment = _parser.Parse(body); await StoreFragmentInCache(context, pageUri, executionContext, fragment); } var content = await _executor.Execute(fragment, executionContext); await context.Response.WriteAllAsync(content); }