Exemplo n.º 1
0
        public DoNext Filter(ServiceArguments arguments)
        {
            string etag = null;

            arguments.Get <IRequestData>().ValuesFor(RequestDataSource.Header)
            .Value(HttpRequestHeaders.IfNoneMatch, value => etag = value.RawValue as string);

            if (etag == null)
            {
                return(DoNext.Continue);
            }

            var resourceHash = _hashing(arguments);
            var headers      = _cache.Current(resourceHash);
            var currentEtag  = headers.ValueFor(HttpResponseHeader.ETag);

            if (etag != currentEtag)
            {
                return(DoNext.Continue);
            }


            var writer = arguments.Get <IHttpWriter>();

            writer.WriteResponseCode(HttpStatusCode.NotModified);

            headers.Each(x => x.Replay(writer));

            return(DoNext.Stop);
        }
Exemplo n.º 2
0
        public DoNext Filter(ServiceArguments arguments)
        {
            string etag = null;

            var request = arguments.Get <IHttpRequest>();

            if (!request.HasHeader(HttpRequestHeader.IfNoneMatch))
            {
                return(DoNext.Continue);
            }

            etag = request.GetHeader(HttpRequestHeader.IfNoneMatch).FirstOrDefault();

            if (etag.IsEmpty())
            {
                return(DoNext.Continue);
            }



            var resourceHash = _hashing(arguments);
            var headers      = _cache.Current(resourceHash);
            var currentEtag  = headers.ValueFor(HttpResponseHeader.ETag);

            if (etag != currentEtag)
            {
                return(DoNext.Continue);
            }

            var writer = arguments.Get <IHttpResponse>();

            writer.WriteResponseCode(HttpStatusCode.NotModified);


            headers.Each(x => x.Replay(writer));


            return(DoNext.Stop);
        }