示例#1
0
        public InterceptMode InterceptOnce()
        {
            string etag = _response.ETag;

            if (string.IsNullOrEmpty(etag))
            {
                return(InterceptMode.DoingNothing);
            }

            if (etag.StartsWith("\"", StringComparison.Ordinal) &&
                etag.EndsWith("\"", StringComparison.Ordinal))
            {
                _compressedETag = etag.Substring(0, etag.Length - 1) + "^" + _encoding.Name + "\"";
            }
            else
            {
                _compressedETag = "\"" + etag + "^" + _encoding.Name + "\"";
            }

            HttpStatusCode statusCode = (HttpStatusCode)_response.StatusCode;

            if (statusCode == HttpStatusCode.NotModified)
            {
                return(InterceptMode.SentFromStorage);
            }

            var key = new CompressedKey
            {
                ETag               = _compressedETag,
                RequestPath        = _request.Path.Value,
                RequestQueryString = _request.QueryString.Value,
                RequestMethod      = _request.Method,
            };

            _compressedItem = _storage.Open(key);
            if (_compressedItem != null)
            {
                return(InterceptMode.SentFromStorage);
            }

            _compressedItemBuilder = _storage.Create(key);
            _compressingStream     = _encoding.CompressTo(_compressedItemBuilder.Stream);
            return(InterceptMode.CompressingToStorage);
        }