无法正确读取IFormFile的文件内容

时间:2019-10-27 12:53:33

标签: c# asp.net xml controller restsharp

我有一个Web表单,它只是文件输入,用户可以提交要发送到我的API的xml文件。

尝试将这些文件读入XmlDocument时出现我的问题。我可以通过字符串正确获取内容,但是当将其加载到xmlFile中时,出现了一个错误,提示语法不正确(尽管它们看上去都与原始文件中的相同)。

我尝试了多种方法从IFormFile中获取内容,但是每种方法似乎都给我带来相同的问题。

控制器:

public ActionResult ReadFiles()
    {            
        IFormFileCollection selectedFiles = Request.Form.Files;

        MemoryStream ms = new MemoryStream();
        List<IFormFile> fileList = selectedFiles.ToList();
        string[] fileNames = fileList.Select(x => x.FileName).ToArray();
        int i = 0;

        RestRequest request = new RestRequest(Method.POST);
        RestClient client = new RestClient("-EndPoint-");
        request.AlwaysMultipartFormData = true;
        request.AddHeader("Content-Type", "multipart/form-data");

        foreach (IFormFile file in fileList)
        {
            file.CopyTo(ms);
            request.AddFile("components", ms.ToArray(), fileNames[i]);
            i++;
        }


        IRestResponse response = client.Execute(request);   
    }

在我的API中,我尝试了各种方法:

尝试#1

[HttpPost]
            public string Checks(IFormFileCollection components)
            {

                XmlDocument xmlFile = new XmlDocument();
                string[] arrFileNames = components.Select(x => x.FileName).ToArray();
                int fileNameCounter = 0;
                MemoryStream ms = new MemoryStream();
                List<IFormFile> fileList = components.ToList();

                foreach (IFormFile file in fileList)
                {
                    using (MemoryStream fileStream = new MemoryStream())
                    {
                        file.CopyTo(fileStream);
                        byte[] bytes = fileStream.ToArray();
                        string xmlString = Encoding.UTF8.GetString(bytes);
                        xmlFile.Load(xmlString);
                        //Do Work
                    }

尝试#2

                StringBuilder xaml = new StringBuilder();
                using (var reader = new StreamReader(file.OpenReadStream()))
                {
                    while (reader.Peek() >= 0)
                        xaml.AppendLine(reader.ReadLine());
                }
                string xamlString = xaml.ToString();
                xmlFile.Load(xamlString);

                //Do Work
            }

尝试3

XmlDocument xml = new XmlDocument();
            using (MemoryStream ms = new MemoryStream())
            {
                fileList[0].CopyTo(ms);
                xml.Load(Encoding.UTF8.GetString(ms.ToArray()));

            }

我尝试的所有其他操作似乎都导致我遇到相同的问题。当我调试代码时,字符串与我的完整xml文件是正确的:

Debug String

但是当我尝试加载到Xml时,出现此错误: Debug Xml

由于某种原因,它似乎正在使用字符串或某些内容进入原始文件路径的一部分,但是即使当我尝试手动对它进行子字符串化处理时,它仍然会给出相同的错误。

我在这里缺少明显的东西吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

我发现一种解决方案是使用XDocument而不是XmlDocument,现在一切正常!

相关问题