SenseNet.Services.GoogleSitemapHandler.ProcessRequest C# (CSharp) Метод

ProcessRequest() публичный Метод

public ProcessRequest ( HttpContext context ) : void
context System.Web.HttpContext
Результат void
        public void ProcessRequest(HttpContext context)
        {
            // requested page path without the handled extension
            string requestPath = PortalContext.Current.RepositoryPath;
            string sitemapNodePath = requestPath.Substring(0, requestPath.LastIndexOf(".map"));
            requestPath = requestPath.Substring(0, requestPath.LastIndexOf('/'));

            NodeQuery query;
            bool listHidden = false;
            string siteUrl = "";


            // get sitemap configuration node at requested path
            Node sitemapNode = Node.LoadNode(sitemapNodePath);
            if (sitemapNode == null)
            {
                context.Response.StatusCode = 404;
                throw new HttpException(404, "Sitemap configuration node not found");
            }

            var propQuery = "Query";
            var propListHidden = "ListHidden";
            var propHidden = "Hidden";
            var propSiteUrl = "SiteUrl";
            
            // invalid sitemap configuration node
			if(!(sitemapNode.HasProperty(propQuery) && sitemapNode.HasProperty(propListHidden) && sitemapNode.HasProperty(propSiteUrl)))
            {
                context.Response.StatusCode = 400;
                throw new HttpException(400, "Invalid sitemap configuration node (Query, ListHidden or SiteUrl properties missing, update CTD)");
            }

			var queryString = sitemapNode.GetProperty<string>(propQuery);

            if ((queryString == null) || (queryString == ""))
            {
                // default query
                query = new NodeQuery();
                query.Add(new StringExpression(StringAttribute.Path, StringOperator.StartsWith, requestPath));
                query.Add(new TypeExpression(ActiveSchema.NodeTypes["Page"]));
            }
            else
            {
                try
                {
                    query = NodeQuery.Parse(queryString);
                }
                catch (Exception) //rethrow
                {
                    context.Response.StatusCode = 400;
                    throw new HttpException(400, "Invalid query string");
                }
            }

			listHidden = sitemapNode.GetProperty<int>(propListHidden) == 1;
			siteUrl = sitemapNode.GetProperty<string>(propSiteUrl);
            if (String.IsNullOrEmpty(siteUrl))
				siteUrl = PortalContext.Current.SiteUrl;


            // query nodes of "Page" type under the requested page
            var pages = query.Execute().Nodes;
            Node[] goodPages;

            // exclude pages under hidden pages from list
            if (!listHidden)
            {
                string[] InvalidPaths =
					pages.Where(page => page.GetProperty<int>(propHidden) == 1).
                    Select(page => page.Path).ToArray();

                goodPages =
                     pages.Where(page => InvalidPaths.Where(ip => page.Path.StartsWith(ip)).Count() == 0).
                     Select(page => page).ToArray();
            }
            else
            {
                goodPages = pages.ToArray();
            }


            // set up object model for sitemap
            Urlset urlset = new Urlset();

            urlset.Urls =
                goodPages.Select(page => new Urlset.Url() { loc = getPageUrl(page, siteUrl) }).ToList();

            // output sitemap XML to http response
            context.Response.ContentType = "text/xml";

            XmlSerializer ser = new XmlSerializer(typeof(Urlset));
            ser.Serialize(context.Response.OutputStream, urlset);

            context.Response.OutputStream.Flush();
        }
GoogleSitemapHandler