コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            cachingManager.Start(context.HttpContext);

            var resultContext = await next();

            if (resultContext.HttpContext.Response.Headers.TryGetString(HeaderNames.ETag, out var etag))
            {
                if (IsCacheable(resultContext.HttpContext, etag))
                {
                    resultContext.Result = new StatusCodeResult(304);
                }
            }
        }
コード例 #5
0
        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);
        }