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)); }
public void an_action_and_continue() { var wasCalled = false; var task = MiddlewareContinuation.Continue(() => wasCalled = true) .ToTask(theEnvironment, theInner) .ShouldBeTheSameAs(theInnerTask); wasCalled.ShouldBeTrue(); }
public void an_action_and_continue() { var wasCalled = false; MiddlewareContinuation.Continue(() => { wasCalled = true; return(Task.CompletedTask); }) .ToTask(theEnvironment, theInner).GetAwaiter().GetResult(); wasCalled.ShouldBeTrue(); }
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(); }
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(); }
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)); }
public void no_action_and_stop() { MiddlewareContinuation.StopHere() .ToTask(theEnvironment, theInner) .ShouldNotBeTheSameAs(theInnerTask); }
public void no_action_and_continue() { MiddlewareContinuation.Continue() .ToTask(theEnvironment, theInner) .ShouldBeTheSameAs(theInnerTask); }