我可以通过 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 页面吗?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net - 从 Visual Studio 2003 过渡到 Visual Studio 2010

从模板 Visual Studio 创建 Blazor(ASP.NET Core 托管)项目

无法在 Visual Studio 中发布 ASP.Net 应用程序

Visual Studio 2010 SP1 上的 ASP.NET 代码分析

如何从 Visual Studio 2015 (+U1) ASP.NET Core 发布到 Windows Server 2012R2 上的 IIS?

ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?