private async Task <WebAsset> ProcessAsset(IOwinContext context, WebAsset asset)
        {
            var processedAsset = await this.webAssetProcessor.ProcessAsync(asset, context.Request);

            if (processedAsset.Metadata.LastModifiedAt != null)
            {
                context.Response.Headers.Append("Last-Modified",
                                                processedAsset.Metadata.LastModifiedAt.Value.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture)
                                                );
            }

            if (processedAsset.Metadata.ContentLength != null)
            {
                context.Response.ContentLength = processedAsset.Metadata.ContentLength;
            }

            // set content length only for buffered
            if (context.Response.ContentLength == null && processedAsset.Content.IsBuffered)
            {
                context.Response.ContentLength = processedAsset.Content.Buffer().Length;
            }

            this.contentTypeProvider.TryGetContentType(processedAsset.Metadata.FileName, out string contentType);

            context.Response.ContentType = processedAsset.Metadata.ContentType ?? contentType;

            var contentEncodingHeader = ContentEncodingHeader(processedAsset.Content);

            if (contentEncodingHeader != null)
            {
                context.Response.Headers.Append("Content-Encoding", contentEncodingHeader);
            }

            return(processedAsset);
        }
 private static async Task WriteAssetContent(IOwinContext context, WebAsset processedAsset)
 {
     using (var assetStream = processedAsset.Content.Stream())
     {
         await StreamUtil.CopyAsync(assetStream, context.Response.Body);
     }
 }
        private bool NotModified(IOwinContext context, WebAsset asset)
        {
            if (asset.Metadata.LastModifiedAt != null)
            {
                var ifModifiedSinceHeader = context.Request.Headers["If-Modified-Since"];
                if (DateTime.TryParse(ifModifiedSinceHeader ?? "", out DateTime ifModifiedSince))
                {
                    var lastModifiedNorm    = NormalizeDate(asset.Metadata.LastModifiedAt.Value);
                    var ifModifiedSinceNorm = NormalizeDate(ifModifiedSince);

                    if (lastModifiedNorm <= ifModifiedSinceNorm)
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.NotModified;
                        return(true);
                    }
                }
            }
            return(false);
        }
        public async Task <WebAsset> ProcessAsync(WebAsset webAsset, IOwinRequest request)
        {
            var acceptEncoding = AcceptEncoding(request);
            var encoding       = supportedEncodings.FirstOrDefault(x => acceptEncoding.Contains(x.Value));

            if (encoding == null)
            {
                return(webAsset);
            }

            if (!this.compressFilter(webAsset))
            {
                return(webAsset);
            }

            var encodedContent = await webAsset.Content.EncodeAsync(encoding.Value).ConfigureAwait(false);

            return(webAsset.WithNewContent(encodedContent));
        }
Beispiel #5
0
 public async Task <WebAsset> ProcessAsync(WebAsset content, IOwinRequest request)
 => await processors.Aggregate(
     Task.FromResult(content),
     async (acc, processor) => await processor.ProcessAsync(await acc, request)
     );
 public static bool ShouldCompress(WebAsset request)
 => extensionToCompress.Any(ext => request.Path.EndsWith(ext, StringComparison.OrdinalIgnoreCase));