Exemple #1
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);
        }