public async Task InvokeAsync(HttpContext context) { cachingManager.Start(context); AppendAuthHeaders(context); context.Response.OnStarting(_ => { var httpContext = (HttpContext)_; cachingManager.Finish(httpContext); if (httpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag)) { if (!cachingOptions.StrongETag && !ETagUtils.IsWeakEtag(etag)) { httpContext.Response.Headers[HeaderNames.ETag] = ETagUtils.ToWeakEtag(etag); } } return(Task.CompletedTask); }, context); await next(context); }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { cachingManager.Start(context.HttpContext); AppendAuthHeaders(context.HttpContext); var resultContext = await next(); if (resultContext.HttpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag)) { if (!cachingOptions.StrongETag && IsWeakEtag(etag)) { etag = ToWeakEtag(etag); resultContext.HttpContext.Response.Headers[HeaderNames.ETag] = etag; } if (IsCacheable(resultContext.HttpContext, etag)) { resultContext.Result = new StatusCodeResult(304); } } cachingManager.Finish(resultContext.HttpContext); }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { var httpContext = context.HttpContext; cachingManager.Start(httpContext); var resultContext = await next(); cachingManager.Finish(httpContext, cachingOptions.MaxSurrogateKeys); if (httpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag)) { if (!cachingOptions.StrongETag && !etag.StartsWith("W/", StringComparison.OrdinalIgnoreCase)) { etag = $"W/{etag}"; httpContext.Response.Headers[HeaderNames.ETag] = etag; } if (HttpMethods.IsGet(httpContext.Request.Method) && httpContext.Response.StatusCode == 200 && httpContext.Request.Headers.TryGetString(HeaderNames.IfNoneMatch, out var noneMatch) && string.Equals(etag, noneMatch, StringComparison.Ordinal)) { resultContext.Result = new StatusCodeResult(304); } } }
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { var httpContext = context.HttpContext; cachingManager.Start(httpContext); cachingManager.AddHeader("Auth-State"); if (!string.IsNullOrWhiteSpace(httpContext.User.OpenIdSubject())) { cachingManager.AddHeader(HeaderNames.Authorization); } else if (!string.IsNullOrWhiteSpace(httpContext.User.OpenIdClientId())) { cachingManager.AddHeader("Auth-ClientId"); } var resultContext = await next(); if (httpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag)) { if (!cachingOptions.StrongETag && !etag.StartsWith("W/", StringComparison.OrdinalIgnoreCase)) { etag = $"W/{etag}"; httpContext.Response.Headers[HeaderNames.ETag] = etag; } if (HttpMethods.IsGet(httpContext.Request.Method) && httpContext.Response.StatusCode == 200 && httpContext.Request.Headers.TryGetString(HeaderNames.IfNoneMatch, out var noneMatch) && string.Equals(etag, noneMatch, StringComparison.Ordinal)) { resultContext.Result = new StatusCodeResult(304); } } cachingManager.Finish(httpContext); }