0

我在一个 asp.net 网站上工作。我需要在 Page Load 事件中获取当前页面的 HTML 输出。我尝试了以下代码。但我没有得到任何输出,它连续执行。

protected void Page_Load(object sender, EventArgs e)
{
        Http(Request.Url.ToString());
}

public void Http(string url)
{
    if (url.Length > 0)
    {
        Uri myUri = new Uri(url);
        // Create a 'HttpWebRequest' object for the specified url. 
        HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
        // Set the user agent as if we were a web browser
        myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4";

        HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
        var stream = myHttpWebResponse.GetResponseStream();
        var reader = new StreamReader(stream);
        var html = reader.ReadToEnd();
        // Release resources of response object.
        myHttpWebResponse.Close();
        Response.Write(html);
    }
}

这里有什么问题?

有没有其他方法可以使用 c# 获取当前页面的 HTML 输出?

我也尝试了以下代码:

 protected void Page_Load(object sender, EventArgs e)
{
    Page pp = this.Page;
    StringWriter tw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(tw);
    pp.RenderControl(hw);

    string theOut = tw.ToString().Trim();
    string FilePath = @"D:\Home.txt";

    Stream s = new FileStream(FilePath, FileMode.Create);

    StreamWriter sw = new StreamWriter(s);
    sw.WriteLine(theOut);
    sw.Close(); 
}

通过使用该代码,我能够在“.txt”文件中获取 HTML。但是执行此代码会导致“一个页面只能有一个服务器端表单标签。” 错误。有人可以帮我解决这个问题吗?

4

3 回答 3

1

Page_Render事件负责为页面生成 HTML,然后调用 Unload 事件。在这种情况下,您应该能够获得页面的 HTML 输出。

于 2012-07-18T09:25:34.383 回答
1

好吧,您将不得不弯曲时空连续体,因为在 Page_Load 事件中没有 html 输出,并且自然地您在 http 方法中的请求(这不是很糟糕的名字吗?)将再次调用 Page_Load。

开个玩笑,您不能在 Page_Load 事件中输出 html,因为它尚未生成。

更新:

您可以使用 HttpFilter 按页面对生成的输出进行更改,看看这个 SO 答案:

https://stackoverflow.com/a/10215626/351383

于 2012-07-18T08:47:06.270 回答
0

你可以试试这个...

public override void Render(HtmlTextWriter writer):
    {
        StringBuilder renderedOutput = new StringBuilder();
        Streamwriter  strWriter = new StringWriter(renderedOutput);
        HtmlTextWriter tWriter = new HtmlTextWriter(strWriter);
        base.Render(tWriter);

        string html = tWriter.InnerWriter.ToString();

        string filename = Server.MapPath(".") + "\\data.txt";
        outputStream = new FileStream(filename, FileMode.Create);
        StreamWriter sWriter = new StreamWriter(outputStream);
        sWriter.Write(renderedOutput.ToString());
        sWriter.Flush();

        //render for output
        writer.Write(renderedOutput.ToString());
    }
于 2012-07-24T09:25:30.630 回答