我的服务器似乎有时会将错误的HTML返回给webclients
我在VS 2012中使用asp.net 4.在IIS Express上调试。
为了调试这个问题,id喜欢跟踪asp.net发送的html
在Global_asax_PreRequestHandlerExecute
我可以访问响应代码和状态,但似乎无法找到正文html
我试图像这样阅读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>
为什么背景颜色丢失了?和btw,为什么不使用更现代的style
属性而不是添加b
和font
如果我能阅读ResponseStream,我至少会知道它丢失的地方,即使我现在也不知道。
非常感谢
P.S。如果.net 4.5对此更好,那么我可能会考虑更改目标框架
答案 0 :(得分:1)
您可以通过覆盖页面/网站母版上的渲染来获取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();
}
}
}
}
in 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
答案 1 :(得分:0)
这在技术上没有回答我原来的问题,但确实解决了我遇到的问题
问题是html没有正确呈现
我现在记得aspx有自适应渲染,所以我发现请求中使用的useragent可能是责备
我将我的代码更改为:
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标记
感谢您的帮助和指导。