Beispiel #1
0
        public FubuContinuation Matches(ETaggedRequest request)
        {
            var current = _cache.Current(request.ResourceHash);

            return(current.IsNotEmpty() && current == request.IfNoneMatch
                       ? FubuContinuation.EndWithStatusCode(HttpStatusCode.NotModified)
                       : FubuContinuation.NextBehavior());
        }
        public DoNext Filter(ServiceArguments arguments)
        {
            string etag = null;

            arguments.Get <AggregateDictionary>().Value(RequestDataSource.Header.ToString(), HttpRequestHeaders.IfNoneMatch, (key, value) => etag = (string)value);

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

            var resourceHash = arguments.Get <ICurrentChain>().ResourceHash();
            var currentEtag  = _cache.Current(resourceHash);

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


            arguments.Get <IHttpWriter>().WriteResponseCode(HttpStatusCode.NotModified);
            return(DoNext.Stop);
        }