XML不会被发送到客户端通过响应对象正确IE

问题描述:

我有一个从客户端调用的处理程序,并且是XML字符串发送回客户端上传的控制。下面的code正常工作中铬,但在IE发送怪异XML返回给客户端。

I have an upload control that calls a handler from the client and is to send back a string of xml to the client. The code below works fine in chrome but is sending weird xml back to the client in IE.

处理器code:

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        var uploadInfo = context.Request.Files[0];
        var uploadStream = uploadInfo.InputStream;
        var upload = new byte[uploadInfo.ContentLength];
        uploadStream.Read(upload, 0, uploadInfo.ContentLength);
        var payload = System.Text.Encoding.UTF8.GetString(upload);

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(payload);
        context.Response.ContentType = "application/xml";
        context.Response.Write(doc.OuterXml);

        //context.Response.Write(payload);
    }        
}

从处理程序调试的XML字符串之前发送到客户端(看起来是正确的)

The XML string debugged from handler before sent to client (which looks correct)

<?xml version="1.0"?>  
 <ApplicationData>
 <DataElement name="Comments" type="String"></DataElement> 
 <DataElement name="ModAuthor" type="String"></DataElement>  
 <DataElement name="CreateDate" type="Datetime"></DataElement>    
 <DataElement name="Author" type="String"></DataElement>   
 <DataElement name="StatusDate" type="Datetime"></DataElement>  
 <DataElement name="StatusDisp" type="String"></DataElement>   
 <DataElement name="Status" type="Number"></DataElement>   
 <DataElement name="Approved" type="Number"></DataElement> 
 <DataElement name="Submitted" type="Number"></DataElement>  
 <DataElement name="LogNumber" type="Number"></DataElement>  
 </ApplicationData>

然后就是被送回就是XML字符串:

Then XML string that is being sent back is:

<DIV class=e><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;?</SPAN><SPAN class=pi>xml version="1.0" </SPAN><SPAN class=m>?&gt;</SPAN> </DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em" class=c><A class=b onfocus=h() onclick="return false" href="#">-</A> <SPAN class=m>&lt;</SPAN><SPAN class=t>ApplicationData</SPAN><SPAN class=m>&gt;</SPAN></DIV>
<DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>Comments</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>String</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>ModAuthor</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>String</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>CreateDate</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>Datetime</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>Author</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>String</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>StatusDate</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>Datetime</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>StatusDisp</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>String</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>Status</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>Number</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>Approved</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>Number</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;</SPAN><SPAN class=t>DataElement</SPAN> <SPAN class=t>name</SPAN><SPAN class=m>="</SPAN><B>Submitted</B><SPAN class=m>"</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>Number</B><SPAN class=m>"</SPAN><SPAN class=m> /&gt;</SPAN> </DIV></DIV>
<DIV><SPAN class=b>&nbsp;</SPAN> <SPAN class=m>&lt;/</SPAN><SPAN class=t>ApplicationData</SPAN><SPAN class=m>&gt;</SPAN></DIV></DIV></DIV>

有关从XML某些原因是越来越转换到客户端在一个完全不同的格式。

For some reason from the XML is getting translated to the client in a totally different format.

我有一种奇怪的感觉,这与编码做的,我的IE有类似的问题一次。

I have a strange feeling that this has to do with encoding, I had a similar problem once with IE.

我看到你使用UTF-8编码来获取XML作为字符串的code。
尝试添加下面的头:

I see in your code that you use UTF-8 encoding to get the xml as string. Try to add the following header :

<?xml version="1.0" encoding="UTF-8"?>

你的XML文件。我知道,如果你离开它,它是自动检测到,但尽量要做到这一点,并试图打开文件的东西,如记事本+ +和保存UTF-8编码。此外,如果务实生成的文件,检查code和试图迫使UTF-8编码。

to your XML file. I know that if you leave it out it is auto-detected, but try to do this and also try to open your file with something like Notepad++ and save in UTF-8 encoding. Also, if the file is generated pragmatically, check the code and try to force UTF-8 encoding.

在我的Web应用程序,这个地方体验,IE搞砸了(大部分)是那里是来自浏览器,火狐,歌剧,Safari等不同的。如果你没有明确输入这些值一些默认值时,浏览器将设置它的默认值,但如果你在code进入其中,你会强迫某种行为。这不是必需的浏览器,Mozilla等,但将修复IE浏览器的跨pretation。

In my experience with web applications, the place where IE screws up (most) is where there are some default values that are different from Chrome, Firefox, Opera, Safari, etc. If you do not explicitly enter these values, the browser will set it's defaults, but if you enter them in code, you will force a certain behaviour. This is not required for Chrome, Mozilla, etc. but will "fix" IE's interpretation.

其中上述默认值是编码
http://social.technet.microsoft.com/Forums/en-US/winserverGP/thread/2f5cdeff-3723-43bf-a880-d4a41222e24d/