2010-06-30 83 views

回答

0

ASPX文件是动态的=>生成的HTML取决于应用程序的状态。
如果您缺少代码隐藏文件,则无法正确转换代码。

Mono Project有一个代码评估器。也就是说,没有应用程序状态,它不会帮助你。

您唯一能做的就是将aspx文件解析为xml(如果它是有效的)并过滤掉动态内容。

+0

那是真,如果ASPX文件取决于后面的代码,如果代码中没有后面的代码,你可以理论上翻译文件 – 2010-06-30 12:46:08

+0

我以为他错过了代码隐藏代码。 这取决于情况 - 页面本身是否需要应用程序状态。 无论如何,将一个aspx文件放到一个web应用程序并下载生成的html是非常容易的。 – 2010-06-30 13:39:26

1

这是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。卡西尼做了类似的事情。我想给哥特一个试试看,什么更适合你的目的。

+0

这个例子没有帮助,因为它只是将aspx文件写入另一个文件而不进行渲染 – 2010-06-30 13:10:10

+0

只有当您没有启用ASP.NET的服务器时,情况才是如此。我会更新我的帖子。 – 2010-06-30 17:04:34

2

从远程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(); 
+0

我想他想要呈现的HTML(它完成呈现后发送给浏览器的内容)... – 2010-06-30 12:45:50

+0

好吧,你是对的 – Zaragon 2010-06-30 12:50:19

0

我不认为你可以做你需要做什么,而ASP.NET运行时。如果您有ASP.NET运行时,并且仍希望能够从ASPX文件的内容中生成HTML文件,则可以编写一个将响应文本写入文件的IHttpModule。

0

如果我正确理解你的问题,你想创建一个Page类的实例(即aspx页面编译),并最终产生的HTML?但是你希望这发生在Web服务器请求的上下文之外?

如果您在实际处理aspx页面后查找html,为什么不直接抓取通过IIS或其他方式呈现页面后返回的html?

也许如果你分享你尝试这个动机,你会得到一些可靠的建议......

相关问题