我有一个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中,我尝试了各种方法:
[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
}
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
}
XmlDocument xml = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
fileList[0].CopyTo(ms);
xml.Load(Encoding.UTF8.GetString(ms.ToArray()));
}
我尝试的所有其他操作似乎都导致我遇到相同的问题。当我调试代码时,字符串与我的完整xml文件是正确的:
但是当我尝试加载到Xml时,出现此错误: Debug Xml
由于某种原因,它似乎正在使用字符串或某些内容进入原始文件路径的一部分,但是即使当我尝试手动对它进行子字符串化处理时,它仍然会给出相同的错误。
我在这里缺少明显的东西吗?
非常感谢
答案 0 :(得分:0)
我发现一种解决方案是使用XDocument而不是XmlDocument,现在一切正常!