是否可以讀取aspx
文件並將其渲染爲html
文件,並將生成的html
文件寫入磁盤?從文件系統讀取ASPX文件並將其渲染爲HTML
.aspx
文件在沒有代碼隱藏文件的文件系統上。如果可能的話,請提供一些示例代碼。
是否可以讀取aspx
文件並將其渲染爲html
文件,並將生成的html
文件寫入磁盤?從文件系統讀取ASPX文件並將其渲染爲HTML
.aspx
文件在沒有代碼隱藏文件的文件系統上。如果可能的話,請提供一些示例代碼。
ASPX文件是動態的=>生成的HTML取決於應用程序的狀態。
如果您缺少代碼隱藏文件,則無法正確轉換代碼。
Mono Project有一個代碼評估器。也就是說,沒有應用程序狀態,它不會幫助你。
您唯一能做的就是將aspx文件解析爲xml(如果它是有效的)並過濾掉動態內容。
這是ASP.NET一直在做的事情。它在文件系統上尋找ASPX頁面,如果需要的話編譯它,然後處理請求。
Codebehind是可選的。你可以有一個只有ASPX的網站,沒有任何預編譯的代碼。
這裏有沒有代碼隱藏
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>ClearCache</title>
</HEAD>
<body>
<form id="ClearCache" method="post" runat="server">
<%
IList keys = new ArrayList(Cache.Count);
foreach (DictionaryEntry de in Cache)
keys.Add(de.Key);
foreach (string key in keys)
{
this.Response.Write(key + "<br>");
Cache.Remove(key);
}
%>
</form>
</body>
</HTML>
下載文件爲html一個ASPX頁面:
var wc = new WebClient();
wc.DownloadFile(myUrl, filename);
如果你沒有一個ASP.NET Web服務器,則必須啓動服務器。 Cassini非常適合這個。那麼你的代碼應該是這樣的:
var server = new Server(80,"/", pathToWebSite);
server.Start();
var wc = new WebClient();
wc.DownloadFile(server.RootUrl + "myPage.aspx", filename);
server.Stop();
如果你多次運行這個,服務器應該被緩存。
請注意,您也可以使用code4life中提到的RuntimeHost。卡西尼做了類似的事情。我想給哥特一個試試看,什麼更適合你的目的。
這個例子沒有幫助,因爲它只是將aspx文件寫入另一個文件而不進行渲染 – 2010-06-30 13:10:10
只有當您沒有啓用ASP.NET的服務器時,情況纔是如此。我會更新我的帖子。 – 2010-06-30 17:04:34
從遠程URL
byte[] buf = new byte[8192];
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(path);
webRequest.KeepAlive = false;
string content = string.Empty;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
if (!(webResponse.StatusCode == HttpStatusCode.OK))
if (_log.IsErrorEnabled) _log.Error(string.Format("Url {0} not found", path));
Stream resStream = webResponse.GetResponseStream();
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
content += encoding.GetString(buf, 0, count);
}
}
while (count > 0);
從網絡或虛擬路徑
string content = string.Empty;
path = HttpContext.Current.Server.MapPath(path);
if (!File.Exists(path))
if (_log.IsErrorEnabled) _log.Error(string.Format("file {0} not found", path));
StreamReader sr = new StreamReader(path, encoding);
content = sr.ReadToEnd();
我想他想要呈現的HTML(它完成呈現後發送給瀏覽器的內容)... – 2010-06-30 12:45:50
好吧,你是對的 – Zaragon 2010-06-30 12:50:19
我不認爲你可以做你需要做什麼,而ASP.NET運行時。如果您有ASP.NET運行時,並且仍希望能夠從ASPX文件的內容中生成HTML文件,則可以編寫一個將響應文本寫入文件的IHttpModule。
如果我正確理解你的問題,你想創建一個Page類的實例(即aspx頁面編譯),並最終產生的HTML?但是你希望這發生在Web服務器請求的上下文之外?
如果您在實際處理aspx頁面後查找html,爲什麼不直接抓取通過IIS或其他方式呈現頁面後返回的html?
也許如果你分享你嘗試這個動機,你會得到一些可靠的建議......
您需要使用wwAspRuntimeHost
類。
Rick Strahl就此發表了一篇文章,我實際上使用了他建議在非IIS環境中託管ASP.NET運行時引擎的相同方法。這裏的鏈接:
http://www.west-wind.com/presentations/aspnetruntime/aspnetruntime.asp
那是真,如果ASPX文件取決於後面的代碼,如果代碼中沒有後面的代碼,你可以理論上翻譯文件 – 2010-06-30 12:46:08
我以爲他錯過了代碼隱藏代碼。 這取決於情況 - 頁面本身是否需要應用程序狀態。 無論如何,將一個aspx文件放到一個web應用程序並下載生成的html是非常容易的。 – 2010-06-30 13:39:26