5

我们正在构建一个 CMS。该站点将由用户在 aspx 页面中构建和管理,但我们希望创建一个 HTML 的静态站点。我们现在使用的方法是使用我在此处找到的代码,该代码重载了 Aspx 页面中的 Render 方法并将 HTML 字符串写入文件。这适用于单个页面,但我们的 CMS 的问题是,我们希望从一开始就自动为站点创建一些 HTML 页面,甚至在创建者编辑系统中的任何内容之前。有谁知道有什么方法可以做到这一点?

4

5 回答 5

4

通过使用 Server.Ecxcute 方法,我似乎找到了解决问题的方法。

我发现一篇文章证明了它的使用:

TextWriter textWriter = new StringWriter();
Server.Execute("myOtherPage.aspx", textWriter);

然后我在 textWriter 上做了一些操作,并将其插入到一个 html 文件中。瞧!有用!

于 2008-09-15T19:58:40.180 回答
2

调用Render方法还是很简单的。只需创建页面的一个实例,WebContext连同WebRequest对象一起创建一个存根,然后调用Render页面的方法。然后,您可以自由地对结果做任何您想做的事情。

或者,编写一个小脚本curlwget脚本来下载和存储您想要静态化的任何页面。

于 2008-09-11T11:18:53.783 回答
2

您可以使用 wget(一个命令行工具)递归地查询每个页面并将它们保存到 html 文件中。它将更新生成的 html 中的所有必要链接以引用 .html 文件而不是 .aspx。这样,您可以像使用服务器生成的页面一样对所有站点进行编码(更易于测试),然后将其转换为静态页面。

如果仅出于性能原因需要静态 HTML,我的首选是使用 ASP.Net 输出缓存。

于 2008-09-11T11:23:05.570 回答
2

我建议您以非常简单的方式执行此操作,并且不要在代码中执行此操作。它将允许您的 CMS 代码执行 CMS 代码应该执行的操作,并使其尽可能简单。

使用HTTrack等产品。它称自己为“网站复印机”。它抓取一个站点并创建 html 输出。它快速且免费。你可以让它以你认为最好的频率运行。

它将您的 HTML 输出需求与您的 CMS 设计和实施分离。它降低了复杂性,并为您在输出 HTML 的方式上提供了一些灵活性,而不会在 CMS 代码中引入故障点。

于 2008-09-11T11:28:35.367 回答
1

@ckarras:我宁愿不使用外部工具,因为我希望以编程方式而不是手动创建 HTML 页面。

@jttraino:我没有需要输出站点的时间间隔-用户创建新站点时必须发生 uotput。

@Frank Krueger:我真的不明白如何使用 WebContext 和 WebRequest 创建我的页面实例。

我在searchdotnet中搜索了“wget” ,并找到了一篇关于名为 WebClient 的 .net 类的帖子。如果我使用 DownloadString() 方法,它似乎可以做我想做的事——从特定的 url 获取字符串。问题是因为我们的 CMS 需要登录,当该方法试图到达页面时,它被抛出到登录页面,因此返回 login.aspx HTML...

关于我如何从这里继续的任何想法?

于 2008-09-11T12:21:37.987 回答