コード例 #1
0
ファイル: CachingFilterTests.cs プロジェクト: jefth/squidex
        public async Task Should_not_append_empty_header_as_vary()
        {
            await sut.OnActionExecutionAsync(executingContext, () =>
            {
                cachingManager.AddHeader(string.Empty);

                return(Task.FromResult(executedContext));
            });

            Assert.Equal("Auth-State", httpContext.Response.Headers[HeaderNames.Vary]);
        }
コード例 #2
0
        private void AppendAuthHeaders(HttpContext 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");
            }
        }
コード例 #3
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);
        }