从文件系统中读取ASPX文件并渲染为HTML

时间:2010-06-30 12:35:06

标签: c# asp.net rendering

是否可以读取aspx文件并呈现为html文件,并将生成的html文件写入磁盘?

.aspx文件位于没有codebehind文件的文件系统上。如果可能,请提供一些示例代码。

6 个答案:

答案 0 :(得分:2)

来自远程网址

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();

答案 1 :(得分:1)

这就是ASP.NET一直在做的事情。它在文件系统上查找ASPX页面,如果需要,编译它,然后处理请求。

Codebehind是可选的。您可以拥有一个只包含ASPX的网站,而不需要任何预编译代码。

这是一个没有代码隐藏的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:

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。卡西尼做了类似的事情。我试试看哥特,看看哪种更适合你的目的。

答案 2 :(得分:1)

您需要使用wwAspRuntimeHost类。

Rick Strahl就此发了一篇文章,我实际上使用了他建议在非IIS环境中托管ASP.NET运行时引擎的方法。这是链接:

http://www.west-wind.com/presentations/aspnetruntime/aspnetruntime.asp

(更新到原帖)
http://www.west-wind.com/Weblog/posts/1197.aspx

答案 3 :(得分:0)

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

Mono Project有一个代码评估程序。也就是说,如果没有申请状态,它将无济于事。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果我正确理解你的问题,你想要创建一个Page类的实例(即编译aspx页面),并且想要生成的html?但是您希望在Web服务器请求的上下文之外发生这种情况吗?

如果你在实际处理aspx页面之后正在寻找html,为什么不抓住在通过IIS或其他任何东西实际呈现页面后返回的html?

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