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

Failing to correctly read file contents of IFormFile

我有一个网络表单,它只是一个文件输入,用户可以在其中提交 xml 文件,这些文件将发送到我的 API。

我在尝试将这些文件读入 Xml 文档时遇到了问题。我以字符串的形式正确获取了内容,但是当将其加载到我的 xml 文件中时,我收到一条错误消息,指出语法不正确(尽管它看起来与我的原始文件中的一样)。

我尝试了多种不同的方法来从我的 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

出于某种原因,它似乎将原始文件路径的一部分与字符串或其他内容一起使用,但即使我尝试手动将其子字符串化,它仍然会出现相同的错误。

我是不是漏掉了什么明显的东西?

非常感谢

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

你可以试试这样的

            var file = Request.Form.Files[0];
        
            string fs = null;
            
            using (var rr = new StreamReader(file.OpenReadStream()))
            {
                fs = rr.ReadToEnd();

            }

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(fs);