我可以通过 Visual Studio 从 ASP.NET 网站导出生成的 html 页面吗?

Posted

技术标签:

【中文标题】我可以通过 Visual Studio 从 ASP.NET 网站导出生成的 html 页面吗?【英文标题】:Can I export generated html pages from ASP.NET website through Visual Studio? 【发布时间】:2010-10-29 00:09:52 【问题描述】:

我的朋友使用 Visual Studio 在 ASP.NET 中开发网站。她只使用母版页工具,除了它是 100% 正常的 html 和 CSS。

有没有办法根据母版页将网站导出到 HTML 页面?

如果没有,它要么手动加载每个页面并保存 HTML,要么我编写一个小应用程序来完成它。

或者,有人知道实现类似目标的工具吗?

【问题讨论】:

很高兴您编辑了标题。在我发布后我认为“应该把'放到 HTML 页面'” :) 我为你澄清了标题。 【参考方案1】:

Visual Studio 没有开箱即用的这种能力。但是,应该可以编写一个遍历站点地图的工具,从响应对象中捕获呈现的 html,然后将其写入文件。

【讨论】:

【参考方案2】:

我真的不知道如何将整个网站导出到本地副本。

但是有工具 - 网站下载器。我知道一个 - TeleportPro,应该还有其他的。看看它们是否对您来说是一种选择。

【讨论】:

【参考方案3】:

如果您想尝试一下,可以试试 Macromedia Dreamweaver。它适用于客户端和服务器端页面开发。

【讨论】:

+1 我曾经在客户端没有动态后端的项目中使用 Dreamweaver 模板系统。它本质上是 ASP.NET 中的母版页系统,但 dreamweaver 会为您生成页面。【参考方案4】:

使用 MasterPages 时,MasterPage 的内容与服务器端的内容页面合并(在预编译或页面的第一个请求时)。因此,您需要在某个时候通过 aspnet_compile 编译内容页面和 MasterPage。请参阅this MSDN article 的“运行时行为”部分。

您的朋友可能想要使用老式的服务器端包含(这基本上是 MasterPage 为您所做的):

<!--#include virtual="/includes/header.html" -->
<!--#include virtual="/includes/nav.html" -->

<p> content </p>

<!--#include virtual="includes/footer.html" -->

如果这被您选择的 Web 服务器/主机阻止(有些出于安全原因禁用它),那么我将创建一个主索引页面并使用 Ajax 调用来填充内容 DIV。当然,如果禁用 javascript,您的访问者将看不到任何内容。

【讨论】:

【参考方案5】:

我认为您需要为此推出自己的产品。这个函数访问一个 url 并获取内容:

  Public Shared Function GetHTTPContent(ByVal url As String) As String
    Dim req As WebRequest = System.Net.HttpWebRequest.Create(url)
    Dim encode As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")
    Dim sr As New StreamReader(req.GetResponse().GetResponseStream(), encode)
    Dim HTTPContent As String = sr.ReadToEnd

    sr.Close()
    sr.Dispose()

    Return HTTPContent

End Function

【讨论】:

【参考方案6】:

存在很多,这里有一个:

HTTrack Website Copier

这也称为爬虫,因为它与搜索引擎所做的相同。

【讨论】:

【参考方案7】:

这是我的快速解决方案,它会在您的本地网站上抓取 .aspx 文件并在 html 旁边生成 .html 文件。

protected void ButtonGenerate_Click(object sender, EventArgs e)

    RecursivelyGenerateHtmlFiles(Server.MapPath("~/"), new DirectoryInfo(Server.MapPath("~/")));


private void RecursivelyGenerateHtmlFiles(string root, DirectoryInfo folder)

    foreach (var aspxPage in folder.GetFiles("*.aspx"))
    
        var destination = aspxPage.FullName.Substring(0, aspxPage.FullName.Length - 4) + "html";

        if (File.Exists(destination))
            File.Delete(destination);

        var url = "http://" + Request.Url.Authority + "/" + aspxPage.FullName.Replace(root, "");
        var request = HttpWebRequest.Create(url);

        File.WriteAllText(destination, new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd());
    

    foreach (var subDirectory in folder.GetDirectories())
    
        RecursivelyGenerateHtmlFiles(root, subDirectory);
    

为我工作。

此外,您可以编辑 .bat 文件以生成包含您站点中所有 .html 文件的文件夹。这在为创意提供平面副本时很有用。

set folder="Generated"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
cd /d ..
xcopy /r /d /i /s /y /exclude:exclude.txt PAHtml Generated

这是要使用的 exclude.txt 文件

.dll
.cs\
.aspx
.pdb
.csproj
.user
.vspscc
.config

【讨论】:

以上是关于我可以通过 Visual Studio 从 ASP.NET 网站导出生成的 html 页面吗?的主要内容,如果未能解决你的问题,请参考以下文章