1

私のサーバーは時々間違った html を webclients に返すようです

VS 2012でasp.net 4を使用しています.IIS Expressでデバッグしています。

この問題をデバッグするために、asp.net が送信している html をトレースしたいと思います。

応答コードとステータスにアクセスできますが、本文のGlobal_asax_PreRequestHandlerExecutehtmlが見つからないようです

私はこのように読んでみましたOutputStream

Dim ms = New MemoryStream
CurContext.Response.OutputStream.CopyTo(ms)
Dim sr = New StreamReader(ms)
Dim rtext = sr.ReadToEnd

しかし、それはNotSupportedException Stream does not support reading.

何か案は?

どうもありがとう

編集

私は今これを確かにテストしました

ページに次の属性を持つラベルがあります

<asp:label id="l" runat="server" Font-Bold="true" Font-Size="X-Large" BackColor="Pink"/>

ブラウザに表示すると、次のように問題なく表示されます。

<span id="C1_FormView1_l" style="background-color:Pink;font-size:X-Large;font-weight:bold;">Processed</span>

しかし、webclientでダウンロードすると取得します

<span id="C1_FormView1_l"><b><font size="6">Processed</font></b></span>

バックカラーが失われるのはなぜですか?styleところで、追加する代わりに、より現代的な属性をb使用しないのはなぜですかfont

もし私が ResponseStream を読むことができれば、今はわからなくても、少なくともそれがどこで失われたかを知ることができます.

どうもありがとうございます

PS .net 4.5 の方が適している場合は、ターゲット フレームワークを変更することを検討してください。

4

2 に答える 2

1

ページ/サイト マスターで Render をオーバーライドすることにより、HTML を取得 (および変更) できます。

        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(ms))
                {
                    HtmlTextWriter tw = new HtmlTextWriter(sw);
                    base.Render(tw);
                    tw.Flush();
                    ms.Position = 0;
                    using (System.IO.StreamReader sr = new System.IO.StreamReader(ms))
                    {
                        string yourHTML = sr.ReadToEnd();
                        // do stuff with yourHTML
                        Response.Write(yourHTML);
                        sr.Close();
                        tw.Dispose();
                    }
                }
            }
        }

vbで

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        Using ms As New System.IO.MemoryStream()
            Using sw As New System.IO.StreamWriter(ms)
                Dim tw As HtmlTextWriter = New HtmlTextWriter(sw)
                MyBase.Render(tw)
                tw.Flush()
                ms.Position = 0
                Using sr As New System.IO.StreamReader(ms)
                    Dim yourHTML As String = sr.ReadToEnd()
                    'do stuff with yourHTML'
                    Response.Write(yourHTML)
                    sr.Close()
                    tw.Dispose()

                End Using
            End Using
        End Using
    End Sub
于 2012-11-18T12:49:16.287 に答える
0

これは私の元の質問に技術的に答えるものではありませんが、私が抱えていた問題を解決します

問題は、html が正しくレンダリングされなかったことです。

aspx にはアダプティブ レンダリングがあることを思い出したので、リクエストで使用されているユーザー エージェントが原因である可能性があると考えました。

私は自分のコードを次のように変更しました:

 Dim myReq As HttpWebRequest = WebRequest.Create(MailUrl)
 myReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"
 Dim resp As HttpWebResponse = myReq.GetResponse
 Dim stream = resp.GetResponseStream
 Dim rdr = New StreamReader(stream)
 Dim BodyText = rdr.ReadToEnd

そして今、htmlは正しい最新のHtml5 / Css3マークアップでレンダリングされています

あなたの助けと指導に感謝します。

于 2012-11-20T14:25:59.713 に答える