void SendAsset(Bundle bundle, IAsset asset) { response.ContentType = bundle.ContentType; var actualETag = "\"" + asset.Hash.ToHexString() + "\""; if (request.RawUrl.Contains(asset.Hash.ToHexString())) { HttpResponseUtil.CacheLongTime(response, actualETag); } else { HttpResponseUtil.NoCache(response); } var givenETag = request.Headers["If-None-Match"]; if (givenETag == actualETag) { HttpResponseUtil.SendNotModified(response); } else { HttpResponseUtil.EncodeStreamAndAppendResponseHeaders(request, response); using (var stream = asset.OpenStream()) { stream.CopyTo(response.OutputStream); } } }
void SendBundle(Bundle bundle, string actualETag) { response.ContentType = bundle.ContentType; if (request.RawUrl.Contains(bundle.Hash.ToHexString())) { HttpResponseUtil.CacheLongTime(response, actualETag); } else { HttpResponseUtil.NoCache(response); } HttpResponseUtil.EncodeStreamAndAppendResponseHeaders(request, response); using (var assetStream = bundle.OpenStream()) { assetStream.CopyTo(response.OutputStream); } }
void SendNotModified(string actualETag) { HttpResponseUtil.CacheLongTime(response, actualETag); // Some browsers seem to require a reminder to keep caching?! response.StatusCode = 304; // Not Modified response.SuppressContent = true; }