private async Task HandleAssetAsync(HttpContext context, IAsset asset, WebOptimizerOptions options) { IAssetResponse response = await _assetBuilder.BuildAsync(asset, context, options); if (response == null) { await _next(context); return; } await WriteOutputAsync(context, asset, response, response.CacheKey, options); }
private async Task WriteOutputAsync(HttpContext context, IAsset asset, IAssetResponse cachedResponse, string cacheKey, WebOptimizerOptions options) { context.Response.ContentType = asset.ContentType; foreach (string name in cachedResponse.Headers.Keys) { context.Response.Headers[name] = cachedResponse.Headers[name]; } if (!string.IsNullOrEmpty(cacheKey)) { if (options.EnableCaching == true) { context.Response.Headers[HeaderNames.CacheControl] = $"max-age=31536000"; // 1 year } context.Response.Headers[HeaderNames.ETag] = $"\"{cacheKey}\""; if (IsConditionalGet(context, cacheKey)) { context.Response.StatusCode = 304; return; } } if (cachedResponse?.Body?.Length > 0) { await context.Response.Body.WriteAsync(cachedResponse.Body, 0, cachedResponse.Body.Length); } }