/// <summary> /// 删除文档 /// </summary> public string Delete_POST() { int id = int.Parse(base.Request["archive.id"]); ArchiveDto archive = ServiceCall.Instance.ArchiveService.GetArchiveById(this.SiteId, id); if (!ArchiveUtility.CanModifyArchive(archive.Author)) { return(base.ReturnError("您无权删除此文档!")); } try { ServiceCall.Instance.ArchiveService.DeleteArchive(this.SiteId, archive.Id); } catch (Exception exc) { return(base.ReturnError(exc.Message)); } //删除 //触发删除事件 //WatchService.PrevDeleteArchive(archive); //WatchService.UpdateArchive(archive); return(base.ReturnSuccess()); }
public void Update_POST() { var archive = ServiceCall.Instance.ArchiveService .GetArchiveById(SiteId, int.Parse(Request.Form("Id"))); //判断是否有权修改 if (!ArchiveUtility.CanModifyArchive(SiteId, archive.PublisherId)) { RenderError("您无权修改此文档!"); return; } var alias = string.IsNullOrEmpty(Request.Form("Alias")) ? string.Empty : HttpUtils.UrlEncode(Request.Form("Alias")); if (alias != string.Empty && archive.Alias != alias) { if (!ServiceCall.Instance.ArchiveService .CheckArchiveAliasAvailable(SiteId, archive.Id, alias)) { RenderError("别名已经存在!"); return; } } archive = GetFormCopyedArchive(SiteId, Request, archive, alias); var r = ServiceCall.Instance.ArchiveService.SaveArchive( SiteId, archive.Category.ID, archive); RenderJson(r); }
public void Forword_GET() { int id = int.Parse(base.Request["archive.id"]); ArchiveDto archive = ServiceCall.Instance.ArchiveService.GetArchiveById(this.SiteId, id); string fullDomain = this.CurrentSite.FullDomain; if (fullDomain.IndexOf("#", StringComparison.Ordinal) != -1) { fullDomain = fullDomain.Replace("#", WebCtx.Current.Host); } string url = Request.Url.Scheme + ":" + fullDomain + archive.Url + ".html"; if (String.IsNullOrEmpty(archive.Outline)) { archive.Outline = ArchiveUtility.GetOutline(archive.Content, 100); } object data = new { title = archive.Title, outline = archive.Outline, url = url, forword_content = String.Format("<a href=\"{0}\" target=\"_blank\"><strong>{1}</strong><br />{2}</a>", url, archive.Title, archive.Outline), link_content = "" }; base.RenderTemplate(ResourceMap.GetPageContent(ManagementPage.Archive_Forword), data); }
public void Forword() { var id = int.Parse(Request.Query("archive.id")); var archive = ServiceCall.Instance.ArchiveService.GetArchiveById(SiteId, id); var fullDomain = CurrentSite.FullDomain; if (fullDomain.IndexOf("#", StringComparison.Ordinal) != -1) { fullDomain = fullDomain.Replace("#", WebCtx.Current.Host); } var url = Request.GetProto() + ":" + fullDomain + archive.Path + ".html"; if (string.IsNullOrEmpty(archive.Outline)) { archive.Outline = ArchiveUtility.GetOutline(archive.Content, 100); } object data = new { title = archive.Title, outline = archive.Outline, url = url, forword_content = string.Format("<a href=\"{0}\" target=\"_blank\"><strong>{1}</strong><br />{2}</a>", url, archive.Title, archive.Outline), link_content = "" }; RenderTemplate(ResourceMap.GetPageContent(ManagementPage.Archive_Forword), data); }
private async Task <bool> ExtractToolAsync(Tool tool, bool reloadTool) { if (!reloadTool && File.Exists(tool.ExecutablePath)) { return(false); } if (Directory.Exists(tool.DirectoryPath)) { Directory.Delete(tool.DirectoryPath, true); } try { await ArchiveUtility.ExtractAsync( tool.Settings.ZippedToolFormat, tool.ZipPath, tool.DirectoryPath, tool.Settings.GetEntryPath).ConfigureAwait(false); } catch (Exception ex) { throw new TorSharpException( $"Failed to extract tool '{tool.Settings.Name}'. Verify that the .zip at path '{tool.ZipPath}' " + $"is valid.", ex); } return(true); }
/// <summary> /// 删除文档 /// </summary> public string Delete_POST() { var id = int.Parse(Request.Form("archive.id")); var archive = ServiceCall.Instance.ArchiveService.GetArchiveById(SiteId, id); if (!ArchiveUtility.CanModifyArchive(SiteId, archive.PublisherId)) { return(ReturnError("您无权删除此文档!")); } try { ServiceCall.Instance.ArchiveService.DeleteArchive(SiteId, archive.Id); } catch (Exception exc) { return(ReturnError(exc.Message)); } //删除 //触发删除事件 //WatchService.PrevDeleteArchive(archive); //WatchService.UpdateArchive(archive); return(ReturnSuccess()); }
protected override void OnActionExecuting(ActionExecutingContext filterContext) { //return; if (DateTime.Now > new DateTime(2012, 11, 1)) { Response.Redirect("/images@#/", true); } hotTopics = HttpRuntime.Cache["hottopics"] as string; recommendTopics = HttpRuntime.Cache["recommendtopics"] as string; companyInfo = HttpRuntime.Cache["companyinfo"] as string; DataTable table; StringBuilder sb; if (hotTopics == null) { sb = new StringBuilder(); table = bll.GetArchivesByViewCount(ModuleType.TextNews, 6); foreach (DataRow dr in table.Rows) { sb.Append("<dt><a title=\"").Append(dr["title"].ToString()).Append("\" href=\"/s_").Append(dr["id"].ToString()).Append("/\">") .Append(dr["title"].ToString().Length > 15 ? dr["title"].ToString().Substring(0, 13) + "..." : dr["title"].ToString()).Append("</a></dt>"); } hotTopics = sb.ToString(); HttpRuntime.Cache.Insert("hottopics", hotTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero); } if (recommendTopics == null) { sb = new StringBuilder(); table = bll.GetSpecialArchives(ModuleType.TextNews, 6); foreach (DataRow dr in table.Rows) { sb.Append("<h4><a title=\"").Append(dr["title"].ToString()).Append("\" href=\"s-").Append(dr["id"].ToString()).Append("/\" target=\"_blank\"><img src=\"") .Append(ArchiveUtility.GetFirstPicUri(dr["content"].ToString(), false) ?? "/images/nopic.gif").Append("\" width=\"70\" height=\"70\" alt=\"").Append(dr["title"].ToString()).Append("\"/></a></h4>"); } recommendTopics = sb.ToString(); HttpRuntime.Cache.Insert("recommendtopics", recommendTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero); } if (companyInfo == null) { Archive a = bll.Get("about"); if (a != null) { Regex reg = new Regex("<[^>]+>"); companyInfo = reg.Replace(a.Content, String.Empty); if (companyInfo.Length > 130) { companyInfo = companyInfo.Remove(130); } companyInfo += "... 【<a href=\"/home/about/\" style=\"color:green\">详细</a>】"; } // HttpRuntime.Cache.Insert("companyInfo", recommendTopics, null, DateTime.Now.AddHours(1), TimeSpan.Zero); } }
/// <summary> /// 文档发布时候发生 /// </summary> /// <param name="archive"></param> static void WatchService_OnArchivePublished(Archive archive) { return; if (archive == null) { return; } //更新标签链接 ArchiveUtility.UpdateArchiveTagLinks("/tags/{0}", archive, true); Category category = new CategoryBLL().Get(a => a.ID == archive.Cid); PageGenerator.Generate(PageGeneratorObject.ArchivePage, category, archive); }
/// <summary> /// Read the <see cref="TorSharpSettings.ZippedToolsDirectory"/> and find the latest tool matching the criteria /// in the provided <paramref name="toolSettings"/>. If none is found return null. /// </summary> /// /// <param name="settings">The settings for TorSharp.</param> /// <param name="toolSettings">The settings for the tool.</param> /// <returns>The tool, or null if none was found.</returns> public static Tool GetLatestToolOrNull( TorSharpSettings settings, ToolSettings toolSettings) { if (!Directory.Exists(settings.ZippedToolsDirectory)) { return(null); } var fileExtension = ArchiveUtility.GetFileExtension(toolSettings.ZippedToolFormat); var pattern = $"{toolSettings.Prefix}*{fileExtension}"; string[] zipPaths = Directory .EnumerateFiles(settings.ZippedToolsDirectory, pattern, SearchOption.TopDirectoryOnly) .ToArray(); var versions = new List <Tool>(); foreach (string zipPath in zipPaths) { string fileName = Path.GetFileName(zipPath); string withoutExtension = fileName.Substring(0, fileName.Length - fileExtension.Length); string directoryPath = Path.Combine(settings.ExtractedToolsDirectory, withoutExtension); string version = withoutExtension.Substring(toolSettings.Prefix.Length); if (!Version.TryParse(version, out var parsedVersion)) { continue; } versions.Add(new Tool { Settings = toolSettings, ZipPath = zipPath, DirectoryPath = directoryPath, Version = parsedVersion, ExecutablePath = Path.Combine(directoryPath, toolSettings.ExecutablePath), WorkingDirectory = Path.Combine(directoryPath, toolSettings.WorkingDirectory), ConfigurationPath = Path.Combine(directoryPath, toolSettings.ConfigurationPath), }); } return(versions .OrderByDescending(t => t.Version) .FirstOrDefault()); }
public void Update_POST() { var form = HttpContext.Current.Request.Form; ArchiveDto archive = ServiceCall.Instance.ArchiveService .GetArchiveById(this.SiteId, int.Parse(form["Id"])); //判断是否有权修改 if (!ArchiveUtility.CanModifyArchive(archive.Author)) { base.RenderError("您无权修改此文档!"); return; } string alias = String.IsNullOrEmpty(form["Alias"]) ? String.Empty : HttpContext.Current.Server.UrlEncode(form["Alias"]); if (alias != String.Empty && archive.Alias != alias) { if (!ServiceCall.Instance.ArchiveService .CheckArchiveAliasAvailable(this.SiteId, archive.Id, alias)) { base.RenderError("别名已经存在!"); return; } } archive = GetFormCopyedArchive(this.SiteId, form, archive, alias); int resultId = ServiceCall.Instance.ArchiveService.SaveArchive(this.SiteId, archive); /* * try * { * //调用监视操作 * //WatchService.UpdateArchive(CmsLogic.Archive.GetArchiveByID(archiveID)); * } * catch * { * } */ base.RenderSuccess("保存成功!"); }
public void Update_POST() { var form = HttpContext.Current.Request.Form; ArchiveDto archive = ServiceCall.Instance.ArchiveService .GetArchiveById(this.SiteId, int.Parse(form["Id"])); //判断是否有权修改 if (!ArchiveUtility.CanModifyArchive(this.SiteId, archive.PublisherId)) { base.RenderError("您无权修改此文档!"); return; } string alias = String.IsNullOrEmpty(form["Alias"]) ? String.Empty : HttpContext.Current.Server.UrlEncode(form["Alias"]); if (alias != String.Empty && archive.Alias != alias) { if (!ServiceCall.Instance.ArchiveService .CheckArchiveAliasAvailable(this.SiteId, archive.Id, alias)) { base.RenderError("别名已经存在!"); return; } } archive = GetFormCopyedArchive(this.SiteId, form, archive, alias); archive = GetFormCopyedArchive(this.SiteId, form, archive, alias); Result r = ServiceCall.Instance.ArchiveService.SaveArchive( this.SiteId, archive.Category.ID, archive); if (r.ErrCode > 0) { base.RenderError(r.ErrMsg); } else { //返回文章ID base.RenderSuccess("保存成功"); } }
static void WatchService_OnClearingCache() { //重新注册模板 ApplicationManager.Reload(); //清除文档辅助方法缓存 ArchiveUtility.ClearCache(); //初始化数据 //PageGenerator.Generate(PageGeneratorObject.InitData); //退出时候更新首页 // PageGenerator.Generate(PageGeneratorObject.Default); //更新about页 // PageGenerator.Generate(PageGeneratorObject.About); }
/// <summary> /// 文档删除之前发生 /// </summary> /// <param name="archive"></param> static void WatchService_OnPrevArchiveUpdate(Archive archive) { //先删除文件,避免修改分类后无法识别生成文件位置 string basePath = AppDomain.CurrentDomain.BaseDirectory + (UseDefaultHtmlPath ?ArchiveUtility.GetCategoryDirectoryPath(archive.Cid) :HtmlPath); FileInfo[] files = new FileInfo[2] { new FileInfo(String.Format(htmlPathFormat, basePath, archive.ID)), new FileInfo(String.Format(htmlPathFormat, basePath, archive.Alias)) }; foreach (FileInfo file in files) { if (file.Exists) { file.Delete(); } } }
/// <summary> /// 文档删除之后发生 /// </summary> /// <param name="archive"></param> static void WatchService_OnArchiveDeleted(Archive archive) { if (archive != null) { //先删除文件,避免修改分类后无法识别生成文件位置 string basePath = AppDomain.CurrentDomain.BaseDirectory + (UseDefaultHtmlPath ? ArchiveUtility.GetCategoryDirectoryPath(archive.Cid) : HtmlPath); string fileID = String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias; FileInfo file = new FileInfo(String.Format(htmlPathFormat, basePath, fileID)); if (file.Exists) { file.Delete(); } } }
private async Task DownloadFileAsync(ToolUpdate update) { if (update.Status != ToolUpdateStatus.NoUpdateAvailable || _settings.ReloadTools) { Directory.CreateDirectory(Path.GetDirectoryName(update.DestinationPath)); try { await _simpleHttpClient.DownloadToFileAsync( update.LatestDownload.Url, update.DestinationPath, _progress).ConfigureAwait(false); try { await ArchiveUtility.TestAsync( update.LatestDownload.Format, update.DestinationPath).ConfigureAwait(false); } catch (Exception ex) { throw new TorSharpException( $"The tool downloaded from '{update.LatestDownload.Url.AbsoluteUri}' could not be read as a " + $"{ArchiveUtility.GetFileExtension(update.LatestDownload.Format)} file.", ex); } } catch { try { File.Delete(update.DestinationPath); } catch { // Best effort. } throw; } } }
private async Task <ToolUpdate> CheckForUpdateAsync( ToolSettings toolSettings, IFileFetcher fetcher, bool useExistingTools) { var latestLocal = ToolUtility.GetLatestToolOrNull(_settings, toolSettings); if (useExistingTools && latestLocal != null) { return(null); } EnableSecurityProtocols(); var latestDownload = await fetcher.GetLatestAsync().ConfigureAwait(false); var fileExtension = ArchiveUtility.GetFileExtension(latestDownload.Format); var fileName = $"{toolSettings.Prefix}{latestDownload.Version}{fileExtension}"; var destinationPath = Path.Combine(_settings.ZippedToolsDirectory, fileName); ToolUpdateStatus status; if (latestLocal == null) { status = ToolUpdateStatus.NoLocalVersion; } else if (!File.Exists(destinationPath)) { status = ToolUpdateStatus.NewerVersionAvailable; } else { status = ToolUpdateStatus.NoUpdateAvailable; } return(new ToolUpdate( status, latestLocal?.Version, destinationPath, latestDownload)); }
/// <summary> /// 文档显示页面 /// </summary> /// <param name="id"></param> public void Show(string id) { Archive archive; Member member; Category catalog; DataTable comments; string user, //发贴名称 replayContent; //评论列表 StringBuilder sb = new StringBuilder(); archive = bll.Get(id); if (archive == null || archive.IsSystem) { Render404(); return; } //增加评论 new System.Threading.Thread(() => { bll.AddViewCount(id, 1); }).Start(); //获取分类 catalog = cbll.Get(c => c.ID == archive.CatalogID); //获取作者昵称 member = mbll.GetMember(archive.Author); user = member == null ? "游客" : member.Nickname; //获取评论 comments = cmbll.GetArchiveComments(archive.ID); string nickname, content; Match match; for (int i = 0; i < comments.Rows.Count; i++) { content = comments.Rows[i]["content"].ToString(); match = Regex.Match(content, "\\(u:'(?<user>.+?)'\\)"); if (match != null) { nickname = match.Groups["user"].Value; content = Regex.Replace(content, "\\(u:'(.+?)'\\)", String.Empty); } else { nickname = "游客"; } sb.Append("<li><dl><!--<em><a href=\"#\">引用</a></em>--><span class=\"cDGray\">") .Append((i + 1).ToString()).Append("楼</span> <span class=\"cGray\">").Append(nickname) .Append("</span> 于 <span class=\"cDGray\">") .Append(String.Format("{0:yyyy-MM-dd HH:mm:ss}", comments.Rows[i]["createDate"])).Append("</span> 说:</dl><dt><p>") .Append(content).Append("</p></dt></li>"); } if (sb.Length == 0) { replayContent = "<li style=\"text-align:center\">暂无评论</li>"; } else { replayContent = sb.ToString(); sb.Remove(0, sb.Length); } string tagsLink = String.Empty; //如果关键词不为空 if (!String.IsNullOrEmpty(archive.Tags)) { sb.Remove(0, sb.Length); Array.ForEach(archive.Tags.Split(','), str => { sb.Append("<strong><a href=\"${domain}/tag/") .Append(Server.UrlEncode(str)).Append("/\" title=\"") .Append(str).Append("\">").Append(str).Append("</a></strong>"); }); tagsLink = sb.ToString(); } //呈现页面 PageUtility.Render("3d9e2da210eea3fb", new { sitemap = @"<a href=""${domain}/archive${suffix}/list/${catalogTag}/"">${catalogName}</a>", catalogName = catalog.Name, catalogTag = catalog.Tag, archiveTitle = archive.Title, author = archive.Author, content = archive.Content, keywords = archive.Tags, click = ++archive.ViewCount, user = user, replays = comments.Rows.Count, outline = ArchiveUtility.GetOutline(archive, 190), source = String.IsNullOrEmpty(archive.Source) ? "${site.shortname}" : archive.Source, publishdate = string.Format("{0:yyyy-MM-dd HH:mm:ss}", archive.CreateDate), tagsLink = tagsLink, guestName = String.Format("游客:{0}", Request.UserHostAddress), replayContent = replayContent, h_topics = hotTopics, r_topics = recommendTopics, h_companyinfo = companyInfo }); }
public override string GetArchive(Category category, Archive archive, params object[] args) { // return base.GetArchive(category, archive, args); #region 属性 /* * //验证密码 * PropertyBLL pbll = new PropertyBLL(); * var a = pbll.GetProperty(category.ModuleID, "pwd"); * if (a != null) * { * var json = archive.GetPropertiesJson(); * string key = json.GetValue("pwd"); * if (!String.IsNullOrEmpty(key)) * { * string requireKey = HttpContext.Current.Request.QueryString["pwd"]; * if (requireKey != key) * { * HttpContext.Current.Response.Write("<div style='margin:0 auto;padding:30px 0'>请输入密码:<input type='text'/><input type='button' value='提交' onclick=\"location.replace(location.href+'?pwd='+this.previousSibling.value)\"/></div>"); * HttpContext.Current.Response.End(); * } * * } * }*/ #endregion //获取模板ID string tplID = null; ModuleBLL mbll = new ModuleBLL(); Module m = mbll.GetModule(category.ModuleID); if (m != null) { TemplateBind tb = tbbll.GetArchiveTemplateBind(archive.ID, category.ID); if (tb != null) { string id = this.GetTemplateID(tb.TplPath); if (id != null) { tplID = "/" + id; } } } //设置默认的模板 if (String.IsNullOrEmpty(tplID)) { tplID = this.FormatTemplatePath("archive"); } string description = ArchiveUtility.GetOutline(archive, 200); //用于当前的模板共享数据 Cms.Context.Items["archive.id"] = archive.ID; Cms.Context.Items["category.tag"] = category.Tag; Cms.Context.Items["module.id"] = category.ModuleID; //解析模板 string html = MultLangPageUtility.Require(tplID, new { id2 = string.IsNullOrEmpty(archive.Alias)?archive.ID:archive.Alias, id = archive.ID, title = archive.Title, categoryName = category.Name, categoryTag = category.Tag, moduleId = category.ModuleID, author = archive.Author, content = archive.Content, tags = archive.Tags, keywords = archive.Tags, description = description.Replace("\"", String.Empty), outline = description, count = archive.ViewCount, source = String.IsNullOrEmpty(archive.Source) ? "原创" : archive.Source, publishdate = string.Format("{0:yyyy-MM-dd}", archive.CreateDate) }); HttpRequest request = HttpContext.Current.Request; //如果包含查询,则加入标签 if (!String.IsNullOrEmpty(request.Url.Query)) { //将查询参数作为标签 html = global::J6.Template.TemplateRegexUtility.Replace(html, a => { if (request[a.Groups[1].Value] != null) { return(request[a.Groups[1].Value]); } return(a.Value); }); } // //TODO:模板被替换成空白 // return(html); }
/// <summary> /// 文档页 /// </summary> /// <param name="tag"></param> /// <param name="id"></param> /// <returns></returns> public void Archive(string lang, string allhtml) { string id = null; string html = String.Empty; Archive archive = null; Category category = null; Regex paramRegex = new Regex("/*([^/]+).html$", RegexOptions.IgnoreCase); if (paramRegex.IsMatch(allhtml)) { id = paramRegex.Match(allhtml).Groups[1].Value; archive = bll.Get(id); } if (archive == null) { base.RenderNotfound(); return; } else { BuiltInArchiveFlags flag = ArchiveFlag.GetBuiltInFlags(archive.Flags); if ((flag & BuiltInArchiveFlags.Visible) != BuiltInArchiveFlags.Visible) //|| (flag & BuiltInArchiveFlags.IsSystem) == BuiltInArchiveFlags.IsSystem) { base.RenderNotfound(); return; } category = cbll.Get(a => a.ID == archive.Cid); if (category == null) { base.RenderNotfound(); return; } else { string vpath = "/" + lang; if ((flag & BuiltInArchiveFlags.AsPage) == BuiltInArchiveFlags.AsPage) { string pattern = "^" + vpath + "/[0-9a-zA-Z]+/[\\.0-9A-Za-z_-]+\\.html$"; string pagePattern = "^" + vpath + "/[\\.0-9A-Za-z_-]+\\.html$"; if (!Regex.IsMatch(Request.Path, pagePattern)) { Response.StatusCode = 301; Response.RedirectLocation = String.Format("/{0}/{1}.html", lang, String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias ); Response.End(); return; } } else { //校验栏目是否正确 string categoryPath = ArchiveUtility.GetCategoryUrlPath(category); if (!allhtml.StartsWith(categoryPath + "/")) { base.RenderNotfound(); return; } //设置了别名,则跳转 if (!String.IsNullOrEmpty(archive.Alias) && String.Compare(id, archive.Alias, true) != 0) //设置了别名 { Response.StatusCode = 301; Response.RedirectLocation = String.Format("/{0}/{1}/{2}.html", lang, category.Tag, String.IsNullOrEmpty(archive.Alias) ? archive.ID : archive.Alias ); Response.End(); return; } } //增加浏览次数 ++archive.ViewCount; new System.Threading.Thread(() => { try { bll.AddViewCount(archive.ID, 1); } catch { } }).Start(); //显示页面 html = cmsPage.GetArchive(category, archive, lang); //再次处理模板 //html = PageUtility.Render(html, new { }, false); } } base.Render(html); }
/// <summary> /// 栏目页面 /// </summary> /// <param name="tag"></param> /// <param name="page"></param> /// <returns></returns> public void Category(string lang, string allcate) { string tag = null; int page = 1; Regex paramRegex = new Regex("/*([^/]+)/(p(\\d+).html)*$", RegexOptions.IgnoreCase); if (paramRegex.IsMatch(allcate)) { Match mc = paramRegex.Match(allcate); tag = mc.Groups[1].Value; //计算页吗:页码如:p3 if (mc.Groups[3].Value != "") { page = int.Parse(mc.Groups[3].Value); } } else { base.RenderNotfound(); return; } string html = String.Empty; Category category = cbll.Get(a => String.Compare(tag, a.Tag, true) == 0); if (category == null) { base.RenderNotfound(); return; } else { //获取路径 string categoryPath = ArchiveUtility.GetCategoryUrlPath(category); if (!allcate.StartsWith(categoryPath + "/")) { base.RenderNotfound(); return; } /********************************* * @ 单页,跳到第一个特殊文档, * @ 如果未设置则最新创建的文档, * @ 如未添加文档则返回404 *********************************/ if (category.ModuleID == (int)SysModuleType.CustomPage) { Archive a = bll.GetFirstSpecialArchive(category.ID); if (a == null) { global::System.Data.DataTable dt = bll.GetArchives(category.ID, 1); if (dt.Rows.Count == 1) { a = dt.Rows[0].ToEntity <Archive>(); } else { base.RenderNotfound("栏目下应确保有推荐的文档存在!"); return; } } Response.StatusCode = 302; Response.RedirectLocation = String.Format("/{0}/{1}/{2}.html", lang, categoryPath, String.IsNullOrEmpty(a.Alias) ? a.ID : a.Alias ); Response.End(); return; } html = cmsPage.GetCategory(category, page, lang); } base.Render(html); }