从C#返回Xml字符串到客户端代码

时间:2012-12-24 18:26:39

标签: c# jquery asp.net xml

我正在从包含xml的用户文件中读取一个文件,我正在Generic Handler中处理,然后传递给客户端。

我遇到的问题是当我将xml字符串传递给客户端时。它的格式不正确。它通过客户端代码查看时完全删除了根标记和"<xml 1.0>"标记。

我正在寻找一些代码来保存xml字符串,就像它到达客户端一样。

我正在使用服务器上的System.IO从文件中读取xml ..

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        string path = context.Server.MapPath("~/Temp");
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);

        var file = context.Request.Files[0];

        string fileName;

        if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")
        {
            string[] files = file.FileName.Split(new char[] { '\\' });
            fileName = files[files.Length - 1];
        }
        else
        {
            fileName = file.FileName;
        }

        string strFileName = fileName;
        fileName = Path.Combine(path, fileName);
        file.SaveAs(fileName);
        string msg = File.ReadAllText(fileName);
        File.Delete(fileName);

        context.Response.Write(msg);
    }
}

xml始终以“Gambardella ...”开头。由于某种原因,它在发送给客户时无法读取文件的开头。

以下是示例xml ..

的图像

enter image description here

数据从处理程序中发送出去,但客户端切断了最重要的信息。看起来我正在使用的插件是存储(或获取)iframe中的数据。 iframe可能是切断开头xml的罪魁祸首吗?

我使用的示例客户端代码是here

1 个答案:

答案 0 :(得分:4)

您只需使用Response.WriteFile,而不是阅读文件然后发送。

Response.WriteFile(fileName);

这将返回具有正确HTTP Content-Type标头的文件内容。如果文件具有XML声明,则不会将其删除。


基于您的代码并且未经测试(没有MemoryStream,因为在这种情况下不需要),以下内容如下所示:

var file = context.Request.Files[0];
file.InputStream.CopyTo(context.Response.OutputStream)