/// <summary> /// Prepares the request. /// </summary> /// <returns> /// Returns false if the request was not successfully prepared /// </returns> public bool PrepareRequest() { // note - at that point the original legacy module did something do handle IIS custom 404 errors // ie pages looking like /anything.aspx?404;/path/to/document - I guess the reason was to support // "directory urls" without having to do wildcard mapping to ASP.NET on old IIS. This is a pain // to maintain and probably not used anymore - removed as of 06/2012. @zpqrtbnk. // // to trigger Umbraco's not-found, one should configure IIS and/or ASP.NET custom 404 errors // so that they point to a non-existing page eg /redirect-404.aspx // TODO: SD: We need more information on this for when we release 4.10.0 as I'm not sure what this means. // trigger the Preparing event - at that point anything can still be changed // the idea is that it is possible to change the uri // _pcr.OnPreparing(); //find domain FindDomain(); // if request has been flagged to redirect then return // whoever called us is in charge of actually redirecting if (_pcr.IsRedirect) { return(false); } // set the culture on the thread - once, so it's set when running document lookups Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _pcr.Culture; //find the published content if it's not assigned. This could be manually assigned with a custom route handler, or // with something like EnsurePublishedContentRequestAttribute or UmbracoVirtualNodeRouteHandler. Those in turn call this method // to setup the rest of the pipeline but we don't want to run the finders since there's one assigned. if (_pcr.PublishedContent == null) { // find the document & template FindPublishedContentAndTemplate(); } // handle wildcard domains HandleWildcardDomains(); // set the culture on the thread -- again, 'cos it might have changed due to a finder or wildcard domain Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _pcr.Culture; // trigger the Prepared event - at that point it is still possible to change about anything // even though the request might be flagged for redirection - we'll redirect _after_ the event // // also, OnPrepared() will make the PublishedContentRequest readonly, so nothing can change // _pcr.OnPrepared(); // we don't take care of anything so if the content has changed, it's up to the user // to find out the appropriate template //complete the PCR and assign the remaining values return(ConfigureRequest()); }
/// <summary> /// Prepares the request. /// </summary> public void PrepareRequest() { // note - at that point the original legacy module did something do handle IIS custom 404 errors // ie pages looking like /anything.aspx?404;/path/to/document - I guess the reason was to support // "directory urls" without having to do wildcard mapping to ASP.NET on old IIS. This is a pain // to maintain and probably not used anymore - removed as of 06/2012. @zpqrtbnk. // // to trigger Umbraco's not-found, one should configure IIS and/or ASP.NET custom 404 errors // so that they point to a non-existing page eg /redirect-404.aspx // TODO: SD: We need more information on this for when we release 4.10.0 as I'm not sure what this means. //find domain FindDomain(); // if request has been flagged to redirect then return // whoever called us is in charge of actually redirecting if (_pcr.IsRedirect) { return; } // set the culture on the thread - once, so it's set when running document lookups Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _pcr.Culture; // find the document & template FindPublishedContentAndTemplate(); // set the culture on the thread -- again, 'cos it might have changed due to a wildcard domain Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _pcr.Culture; // trigger the Prepared event - at that point it is still possible to change about anything // even though the request might be flagged for redirection - we'll redirect _after_ the event // // also, OnPrepared() will make the PublishedContentRequest readonly, so nothing can change // _pcr.OnPrepared(); // we don't take care of anything so if the content has changed, it's up to the user // to find out the appropriate template // set the culture on the thread -- again, 'cos it might have changed in the event handler Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = _pcr.Culture; // if request has been flagged to redirect, or has no content to display, // then return - whoever called us is in charge of actually redirecting if (_pcr.IsRedirect || !_pcr.HasPublishedContent) { return; } // we may be 404 _and_ have a content // can't go beyond that point without a PublishedContent to render // it's ok not to have a template, in order to give MVC a chance to hijack routes // note - the page() ctor below will cause the "page" to get the value of all its // "elements" ie of all the IPublishedContent property. If we use the object value, // that will trigger macro execution - which can't happen because macro execution // requires that _pcr.UmbracoPage is already initialized = catch-22. The "legacy" // pipeline did _not_ evaluate the macros, ie it is using the data value, and we // have to keep doing it because of that catch-22. // assign the legacy page back to the docrequest // handlers like default.aspx will want it and most macros currently need it _pcr.UmbracoPage = new page(_pcr); // used by many legacy objects _routingContext.UmbracoContext.HttpContext.Items["pageID"] = _pcr.PublishedContent.Id; _routingContext.UmbracoContext.HttpContext.Items["pageElements"] = _pcr.UmbracoPage.Elements; }