private static bool CheckModified(ResultExecutingContext context, IConditionalRequestMetadata metadata)
        {
            bool modified = true;

            HttpRequestConditions requestConditions = context.HttpContext.Request.GetRequestConditions();

            if ((requestConditions.IfNoneMatch != null) && requestConditions.IfNoneMatch.Any())
            {
                if (!String.IsNullOrWhiteSpace(metadata.EntityTag) && requestConditions.IfNoneMatch.Contains(metadata.EntityTag))
                {
                    modified       = false;
                    context.Result = new StatusCodeResult(StatusCodes.Status304NotModified);
                }
            }
            else if (requestConditions.IfModifiedSince.HasValue && metadata.LastModified.HasValue)
            {
                DateTimeOffset lastModified = metadata.LastModified.Value.AddTicks(-(metadata.LastModified.Value.Ticks % TimeSpan.TicksPerSecond));

                if (lastModified <= requestConditions.IfModifiedSince.Value)
                {
                    modified       = false;
                    context.Result = new StatusCodeResult(StatusCodes.Status304NotModified);
                }
            }

            return(modified);
        }
        public void OnResultExecuting(ResultExecutingContext context)
        {
            IConditionalRequestMetadata metadata = (context.Result as ObjectResult)?.Value as IConditionalRequestMetadata;

            if (metadata != null)
            {
                if (CheckModified(context, metadata))
                {
                    SetConditionalMetadataHeaders(context, metadata);
                }
            }
        }
        private static void SetConditionalMetadataHeaders(ResultExecutingContext context, IConditionalRequestMetadata metadata)
        {
            ResponseHeaders responseHeaders = context.HttpContext.Response.GetTypedHeaders();

            if (!String.IsNullOrWhiteSpace(metadata.EntityTag))
            {
                responseHeaders.ETag = new EntityTagHeaderValue(metadata.EntityTag, true);
            }

            if (metadata.LastModified.HasValue)
            {
                responseHeaders.LastModified = metadata.LastModified.Value;
            }
        }