0

私はasp.net Webサイトで働いています。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 を取得できますが、このコードを実行すると、「ページにはサーバー側のフォーム タグを 1 つしか含めることができません。」エラー。誰でもこれを解決するのを手伝ってもらえますか?

4

3 に答える 3

1

そうですね、Page_Loadイベントではhtml出力がないため、時空間の連続性を曲げる必要があります。当然、httpメソッドでのリクエスト(これは本当に悪い名前ではありませんか?)はPage_Loadを再度呼び出します。

これは冗談です。まだ作成されていないため、Page_Loadイベントでhtmlを出力することはできません。

アップデート:

HttpFilterを使用して、ページごとに生成された出力に変更を加えることができます。このSOの回答を見てください。

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

于 2012-07-18T08:47:06.270 に答える
1

Page_Renderイベントはページの HTML の生成を担当し、この後に Unload イベントが呼び出されます。このイベントでは、ページの HTML 出力を取得できるはずです。

于 2012-07-18T09:25:34.383 に答える
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 に答える