示例#1
0
 protected virtual void OnPostResolveRequestCache(object sender, EventArgs e)
 {
     HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
     RouteData routeData = RouteTable.Routes.GetRouteData(httpContext);
     if (null == routeData)
     {
         return;
     }
     RequestContext requestContext = new RequestContext { RouteData = routeData, HttpContext = httpContext };
     IHttpHandler handler = routeData.RouteHandler.GetHttpHandler(requestContext);
     httpContext.RemapHandler(handler); 
 }
示例#2
0
        // This event handler is fired for each request.  The module fetches the contents, identifies if the url should be handled, and returns the parsed content if necessary.
        private void onApplicationPostResolveRequestCache(object sender, EventArgs e)
        {
            var httpContext = new HttpContextWrapper(((HttpApplication)sender).Context);

            var contents = this.getContentProvider().GetContents(httpContext);
            var requestPath = httpContext.Request.AppRelativeCurrentExecutionFilePath.Substring(2).Split('/')[0];
            var content = contents.FirstOrDefault(c => c.Slug.Equals(requestPath, StringComparison.OrdinalIgnoreCase));

            if (content == null)
            {
                // Content for this request was not found.  Let asp.net handle this request.
                return;
            }

            IHttpHandler handler = null;
            var templates = new[] { Utilities.GetValue<string>(content, "Template", httpContext.GetConfigurationValue<string>("template", null) ?? "default"), "default" };

            // for each possible template, try to create a handler.
            foreach (var template in templates)
            {
                var templateVirtualPath = string.Format("~/App_Templates/{0}/_content.cshtml", template);
                handler = WebPageHttpHandler.CreateFromVirtualPath(templateVirtualPath);

                // If we successfully found a handler, use it.
                if (handler != null)
                {
                    break;
                }
            }

            if (handler == null)
            {
                throw new Exception("Content found, but no template available.");
            }

            // Set the request data
            dynamic requestData = new ExpandoObject();
            requestData.Contents = contents;
            requestData.Content = content;

            // Stash the request data for use by the handlers later.
            Utilities.SetRequestData(httpContext, requestData);

            // Let asp.net know we will handle this request.
            httpContext.RemapHandler(handler);
        }
		/// <summary>
		/// Handles the PostResolveRequestCache event of the context control.
		/// </summary>
		/// <param name="sender">The source of the event.</param>
		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
		private void context_PostResolveRequestCache(object sender, EventArgs e)
		{
			var context = new HttpContextWrapper(((HttpApplication)sender).Context);

			// check to see if this is a proxy request
            if (context.Items.Contains(Manager.ProxyHandlerStorageName))
            {
                var proxyHandler = context.Items[Manager.ProxyHandlerStorageName] as IHttpHandler;
                context.RemapHandler(proxyHandler);
            }
		}
示例#4
0
 internal static void RemapHandlerForRequest(HttpApplication app)
 {
     HttpContextBase httpContextBase = new HttpContextWrapper(app.Context);
     httpContextBase.RemapHandler(new DiagDashHandler());
 }