コード例 #1
0
        public override MiddlewareContinuation Invoke(IHttpRequest request, IHttpResponse response)
        {
            if (request.IsNotHttpMethod("GET", "HEAD"))
            {
                return(MiddlewareContinuation.Continue());
            }

            // TODO -- hokey. Get rid of this as we switch over to pure OWIN instead
            // of the IHttp**** wrappers
            var relativeUrl = request.RelativeUrl().Split('?').FirstOrDefault();

            // Gets around what I *think* is a Katana bug
            if (relativeUrl.StartsWith("http:/"))
            {
                return(MiddlewareContinuation.Continue());
            }

            var file = _files.Find(relativeUrl);

            if (file == null)
            {
                return(MiddlewareContinuation.Continue());
            }

            if (_settings.DetermineStaticFileRights(file) != AuthorizationRight.Allow)
            {
                return(MiddlewareContinuation.Continue());
            }

            if (request.IsHead())
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.OK));
            }

            if (request.IfMatchHeaderDoesNotMatchEtag(file))
            {
                return(new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, "If-Match test failed"));
            }

            if (request.IfNoneMatchHeaderMatchesEtag(file))
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified));
            }

            if (request.IfModifiedSinceHeaderAndNotModified(file))
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified));
            }

            if (request.IfUnModifiedSinceHeaderAndModifiedSince(file))
            {
                return(new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, "File has been modified"));
            }

            // Write headers here.

            return(new WriteFileContinuation(response, file, _settings));
        }
コード例 #2
0
        public void an_action_and_continue()
        {
            var wasCalled = false;

            var task = MiddlewareContinuation.Continue(() => wasCalled = true)
                       .ToTask(theEnvironment, theInner)
                       .ShouldBeTheSameAs(theInnerTask);

            wasCalled.ShouldBeTrue();
        }
コード例 #3
0
        public void an_action_and_continue()
        {
            var wasCalled = false;

            MiddlewareContinuation.Continue(() => {
                wasCalled = true;
                return(Task.CompletedTask);
            })
            .ToTask(theEnvironment, theInner).GetAwaiter().GetResult();

            wasCalled.ShouldBeTrue();
        }
コード例 #4
0
        public void an_action_and_stop()
        {
            var wasCalled = false;

            var task = MiddlewareContinuation.StopHere(() => wasCalled = true)
                       .ToTask(theEnvironment, theInner);

            task.ShouldNotBeTheSameAs(theInnerTask);

            task.Wait();

            wasCalled.ShouldBeTrue();
        }
コード例 #5
0
        public void an_action_and_stop()
        {
            var wasCalled = false;

            var task = MiddlewareContinuation.StopHere(() => {
                wasCalled = true;
                return(Task.CompletedTask);
            })
                       .ToTask(theEnvironment, theInner);

            task.Wait();

            wasCalled.ShouldBeTrue();
        }
コード例 #6
0
ファイル: StaticFileMiddleware.cs プロジェクト: xeno3/fubumvc
        public override MiddlewareContinuation Invoke(IHttpRequest request, IHttpResponse response)
        {
            if (request.IsNotHttpMethod("GET", "HEAD"))
            {
                return(MiddlewareContinuation.Continue());
            }

            var file = _files.Find(request.RelativeUrl());

            if (file == null)
            {
                return(MiddlewareContinuation.Continue());
            }

            if (_settings.DetermineStaticFileRights(file) != AuthorizationRight.Allow)
            {
                return(MiddlewareContinuation.Continue());
            }

            if (request.IsHead())
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.OK));
            }

            if (request.IfMatchHeaderDoesNotMatchEtag(file))
            {
                return(new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, "If-Match test failed"));
            }

            if (request.IfNoneMatchHeaderMatchesEtag(file))
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified));
            }

            if (request.IfModifiedSinceHeaderAndNotModified(file))
            {
                return(new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified));
            }

            if (request.IfUnModifiedSinceHeaderAndModifiedSince(file))
            {
                return(new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, "File has been modified"));
            }

            // Write headers here.

            return(new WriteFileContinuation(response, file, _settings));
        }
コード例 #7
0
 public void no_action_and_stop()
 {
     MiddlewareContinuation.StopHere()
     .ToTask(theEnvironment, theInner)
     .ShouldNotBeTheSameAs(theInnerTask);
 }
コード例 #8
0
 public void no_action_and_continue()
 {
     MiddlewareContinuation.Continue()
     .ToTask(theEnvironment, theInner)
     .ShouldBeTheSameAs(theInnerTask);
 }