Example #1
0
        /// <summary>
        /// 访问文档
        /// </summary>
        /// <param name="context"></param>
        /// <param name="allhtml"></param>
        public static void RenderArchive(CmsContext context, string allhtml)
        {
            string      id = null;
            int         siteId;
            string      html     = String.Empty;
            ArchiveDto  archive  = default(ArchiveDto);
            CategoryDto category = default(CategoryDto);

            //检测网站状态
            if (!context.CheckSiteState())
            {
                return;
            }

            //检查缓存
            if (!context.CheckAndSetClientCache())
            {
                return;
            }


            siteId = context.CurrentSite.SiteId;

            ICmsPageGenerator cmsPage = new PageGeneratorObject(context);


            Regex paramRegex = new Regex("/*([^/]+).html$", RegexOptions.IgnoreCase);

            if (paramRegex.IsMatch(allhtml))
            {
                id      = paramRegex.Match(allhtml).Groups[1].Value;
                archive = ServiceCall.Instance.ArchiveService.GetArchiveByIdOrAlias(siteId, id);
            }

            if (archive.Id <= 0)
            {
                RenderNotFound(context);
                return;
            }
            else
            {
                //跳转
                if (!String.IsNullOrEmpty(archive.Location))
                {
                    string url;
                    if (Regex.IsMatch(archive.Location, "^http://", RegexOptions.IgnoreCase))
                    {
                        url = archive.Location;
                    }
                    else
                    {
                        if (archive.Location.StartsWith("/"))
                        {
                            throw new Exception("URL不能以\"/\"开头!");
                        }
                        url = String.Concat(context.SiteDomain, archive.Location);
                    }

                    context.Response.Redirect(url, true);  //302

                    //context.Response.StatusCode = 301;
                    //context.Render(@"<html><head><meta name=""robots"" content=""noindex""><script>location.href='" +
                    //                   url + "';</script></head><body></body></html>");

                    return;
                }

                BuiltInArchiveFlags flag = ArchiveFlag.GetBuiltInFlags(archive.Flags);

                if ((flag & BuiltInArchiveFlags.Visible) != BuiltInArchiveFlags.Visible)
                //|| (flag & BuiltInArchiveFlags.IsSystem)== BuiltInArchiveFlags.IsSystem)   //系统文档可以单独显示
                {
                    RenderNotFound(context);
                    return;
                }

                category = archive.Category;

                if (!(category.Id > 0))
                {
                    RenderNotFound(context);
                    return;
                }
                else
                {
                    string appPath = Cms.Context.SiteAppPath;
                    if (appPath != "/")
                    {
                        appPath += "/";
                    }

                    if ((flag & BuiltInArchiveFlags.AsPage) == BuiltInArchiveFlags.AsPage)
                    {
                        string pattern     = "^" + appPath + "[0-9a-zA-Z]+/[\\.0-9A-Za-z_-]+\\.html$";
                        string pagePattern = "^" + appPath + "[\\.0-9A-Za-z_-]+\\.html$";

                        if (!Regex.IsMatch(context.Request.Path, pagePattern))
                        {
                            context.Response.StatusCode       = 301;
                            context.Response.RedirectLocation = String.Format("{0}{1}.html",
                                                                              appPath,
                                                                              String.IsNullOrEmpty(archive.Alias) ? archive.StrId : archive.Alias
                                                                              );
                            context.Response.End();
                            return;
                        }
                    }
                    else
                    {
                        //校验栏目是否正确
                        string categoryPath = category.UriPath;
                        string _path        = appPath != "/" ? allhtml.Substring(appPath.Length - 1) : allhtml;

                        if (!_path.StartsWith(categoryPath + "/"))
                        {
                            RenderNotFound(context);
                            return;
                        }

                        //设置了别名,则跳转
                        if (!String.IsNullOrEmpty(archive.Alias) && String.Compare(id, archive.Alias, true) != 0)
                        {
                            context.Response.StatusCode       = 301;
                            context.Response.RedirectLocation = String.Format("{0}{1}/{2}.html",
                                                                              appPath,
                                                                              categoryPath,
                                                                              String.IsNullOrEmpty(archive.Alias) ? archive.StrId : archive.Alias
                                                                              );
                            context.Response.End();
                            return;
                        }
                    }


                    //增加浏览次数
                    ++archive.ViewCount;
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            ServiceCall.Instance.ArchiveService.AddCountForArchive(siteId, archive.Id, 1);
                        }
                        catch
                        {
                        }
                    }).Start();

                    //显示页面
                    html = cmsPage.GetArchive(archive);

                    //再次处理模板
                    //html = PageUtility.Render(html, new { }, false);
                }
            }

            // return html;
            context.Render(html);
        }
Example #2
0
        /// <summary>
        /// 访问文档
        /// </summary>
        /// <param name="context"></param>
        /// <param name="allhtml"></param>
        public static void RenderArchive(CmsContext context, string allhtml)
        {
            string id = null;
            int siteId;
            string html = String.Empty;
            ArchiveDto archive = default(ArchiveDto);
            CategoryDto category = default(CategoryDto);

            //检测网站状态
            if (!context.CheckSiteState()) return;

            //检查缓存
            if (!context.CheckAndSetClientCache()) return;

            
            siteId=context.CurrentSite.SiteId;

        	ICmsPageGenerator cmsPage=new PageGeneratorObject(context);


            Regex paramRegex = new Regex("/*([^/]+).html$", RegexOptions.IgnoreCase);
            if (paramRegex.IsMatch(allhtml))
            {
                id = paramRegex.Match(allhtml).Groups[1].Value;
                archive = ServiceCall.Instance.ArchiveService.GetArchiveByIdOrAlias(siteId, id);
            }

            if (archive.Id <= 0)
            {
            	RenderNotFound(context);
                return;
            }
            else
            {

                BuiltInArchiveFlags flag = ArchiveFlag.GetBuiltInFlags(archive.Flags);

                if ((flag & BuiltInArchiveFlags.Visible) != BuiltInArchiveFlags.Visible)
                //|| (flag & BuiltInArchiveFlags.IsSystem)== BuiltInArchiveFlags.IsSystem)   //系统文档可以单独显示
                {
            		RenderNotFound(context);
                    return;
                }

                category = archive.Category;

                if (!(category.ID>0))
                {
            		RenderNotFound(context);
                    return;
                }
                else
                {
                	string appPath = Cms.Context.SiteAppPath;
                    if (appPath != "/") appPath += "/";

                    if ((flag & BuiltInArchiveFlags.AsPage) == BuiltInArchiveFlags.AsPage)
                    {
                        string pattern = "^" + appPath + "[0-9a-zA-Z]+/[\\.0-9A-Za-z_-]+\\.html$";
                        string pagePattern = "^" + appPath + "[\\.0-9A-Za-z_-]+\\.html$";

                        if (!Regex.IsMatch(context.Request.Path, pagePattern))
                        {
                            context.Response.StatusCode = 301;
                            context.Response.RedirectLocation = String.Format("{0}{1}.html",
                                appPath,
                                String.IsNullOrEmpty(archive.Alias) ? archive.StrId : archive.Alias
                                );
                            context.Response.End();
                            return;
                        }
                    }
                    else
                    {
                        //校验栏目是否正确
                        string categoryPath = category.UriPath;
                        string _path = appPath != "/" ? allhtml.Substring(appPath.Length - 1) : allhtml;

                        if (!_path.StartsWith(categoryPath + "/"))
                        {
            				RenderNotFound(context);
                            return;
                        }

                        //设置了别名,则跳转
                        if (!String.IsNullOrEmpty(archive.Alias) && String.Compare(id, archive.Alias, true) != 0)
                        {
                            context.Response.StatusCode = 301;
                            context.Response.RedirectLocation = String.Format("{0}{1}/{2}.html",
                                 appPath,
                                 categoryPath,
                                 String.IsNullOrEmpty(archive.Alias) ? archive.StrId : archive.Alias
                                 );
                            context.Response.End();
                            return;

                        }
                    }


                    //增加浏览次数
                    ++archive.ViewCount;
                    new System.Threading.Thread(() =>
                    {
                        try
                        {
                            ServiceCall.Instance.ArchiveService.AddCountForArchive(siteId, archive.Id, 1);
                        }
                        catch
                        {
                        }
                    }).Start();

                    //显示页面
                    html = cmsPage.GetArchive(archive);

                    //再次处理模板
                    //html = PageUtility.Render(html, new { }, false); 
                }
            }

            // return html;
            context.Render(html);
        }