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