public void WillDelegateContentNotInMyDirectoryFriendHandlers() { var module = new RequestReduceModule(); var handler = new DefaultHttpHandler(); var config = new Mock<IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock<HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/content/someresource.less"); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/content/someresource.less")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock<HttpServerUtilityBase>().Object); context.Setup(x => x.Items).Returns(new Hashtable()); RRContainer.Current = new Container(x => { x.For<IRRConfiguration>().Use(config.Object); x.For<IUriBuilder>().Use<UriBuilder>(); }); Registry.HandlerMaps.Add(x => x.AbsolutePath.EndsWith(".less") ? handler : null); Registry.HandlerMaps.Add(x => x.AbsolutePath.EndsWith(".les") ? new DefaultHttpHandler() : null); module.HandleRRContent(context.Object); //context.Verify(x => x.RemapHandler(handler), Times.Once()); Assert.Equal(handler, context.Object.Items["remapped handler"]); RRContainer.Current = null; Registry.HandlerMaps.Clear(); }
public void WillDelegateContentMappedToHandler() { var module = new RequestReduceModule(); var handler = new DefaultHttpHandler(); var config = new Mock<IRRConfiguration>(); config.Setup(x => x.ResourceAbsolutePath).Returns("/RRContent"); var context = new Mock<HttpContextBase>(); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/content/someresource.less")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock<HttpServerUtilityBase>().Object); context.Setup(x => x.Items).Returns(new Hashtable()); var handlerFactory = new HandlerFactory(config.Object, new UriBuilder(config.Object)); handlerFactory.AddHandlerMap(x => x.AbsolutePath.EndsWith(".less") ? handler : null); handlerFactory.AddHandlerMap(x => x.AbsolutePath.EndsWith(".les") ? new DefaultHttpHandler() : null); RRContainer.Current = new Container(x => { x.For<IRRConfiguration>().Use(config.Object); x.For<IUriBuilder>().Use<UriBuilder>(); x.For<IHandlerFactory>().Use(handlerFactory); }); module.HandleRRContent(context.Object); Assert.Equal(handler, context.Object.Items["remapped handler"]); RRContainer.Current = null; }
private void ExecuteInternal(IHttpHandler handler, TextWriter writer, bool preserveForm, bool setPreviousPage, VirtualPath path, VirtualPath filePath, string physPath, Exception error, string queryStringOverride) { if (handler == null) { throw new ArgumentNullException("handler"); } HttpRequest request = this._context.Request; HttpResponse response = this._context.Response; HttpApplication applicationInstance = this._context.ApplicationInstance; HttpValueCollection form = null; VirtualPath path2 = null; string queryStringText = null; TextWriter writer2 = null; AspNetSynchronizationContext syncContext = null; this.VerifyTransactionFlow(handler); this._context.PushTraceContext(); this._context.SetCurrentHandler(handler); bool enabled = this._context.SyncContext.Enabled; this._context.SyncContext.Disable(); try { try { this._context.ServerExecuteDepth++; path2 = request.SwitchCurrentExecutionFilePath(filePath); if (!preserveForm) { form = request.SwitchForm(new HttpValueCollection()); if (queryStringOverride == null) { queryStringOverride = string.Empty; } } if (queryStringOverride != null) { queryStringText = request.QueryStringText; request.QueryStringText = queryStringOverride; } if (writer != null) { writer2 = response.SwitchWriter(writer); } Page page = handler as Page; if (page != null) { if (setPreviousPage) { page.SetPreviousPage(this._context.PreviousHandler as Page); } Page page2 = this._context.Handler as Page; if ((page2 != null) && page2.SmartNavigation) { page.SmartNavigation = true; } if (page is IHttpAsyncHandler) { syncContext = this._context.InstallNewAspNetSynchronizationContext(); } } if (((handler is StaticFileHandler) || (handler is DefaultHttpHandler)) && !DefaultHttpHandler.IsClassicAspRequest(filePath.VirtualPathString)) { try { response.WriteFile(physPath); } catch { error = new HttpException(0x194, string.Empty); } } else if (!(handler is Page)) { error = new HttpException(0x194, string.Empty); } else { if (handler is IHttpAsyncHandler) { bool isInCancellablePeriod = this._context.IsInCancellablePeriod; if (isInCancellablePeriod) { this._context.EndCancellablePeriod(); } try { IHttpAsyncHandler handler2 = (IHttpAsyncHandler)handler; IAsyncResult result = handler2.BeginProcessRequest(this._context, null, null); if (!result.IsCompleted) { bool flag3 = false; try { try { } finally { Monitor.Exit(applicationInstance); flag3 = true; } WaitHandle asyncWaitHandle = result.AsyncWaitHandle; if (asyncWaitHandle == null) { goto Label_0210; } asyncWaitHandle.WaitOne(); goto Label_0226; Label_020A: Thread.Sleep(1); Label_0210: if (!result.IsCompleted) { goto Label_020A; } } finally { if (flag3) { Monitor.Enter(applicationInstance); } } } Label_0226: try { handler2.EndProcessRequest(result); } catch (Exception exception) { error = exception; } goto Label_0306; } finally { if (isInCancellablePeriod) { this._context.BeginCancellablePeriod(); } } } using (new DisposableHttpContextWrapper(this._context)) { try { handler.ProcessRequest(this._context); } catch (Exception exception2) { error = exception2; } } } } finally { this._context.ServerExecuteDepth--; this._context.RestoreCurrentHandler(); if (writer2 != null) { response.SwitchWriter(writer2); } if ((queryStringOverride != null) && (queryStringText != null)) { request.QueryStringText = queryStringText; } if (form != null) { request.SwitchForm(form); } request.SwitchCurrentExecutionFilePath(path2); if (syncContext != null) { this._context.RestoreSavedAspNetSynchronizationContext(syncContext); } if (enabled) { this._context.SyncContext.Enable(); } this._context.PopTraceContext(); } } catch { throw; } Label_0306: if (error == null) { return; } if ((error is HttpException) && (((HttpException)error).GetHttpCode() != 500)) { error = null; } if (path != null) { throw new HttpException(System.Web.SR.GetString("Error_executing_child_request_for_path", new object[] { path }), error); } throw new HttpException(System.Web.SR.GetString("Error_executing_child_request_for_handler", new object[] { handler.GetType().ToString() }), error); }