У меня есть веб-форма, которая представляет собой просто файл ввода, где пользователь может отправлять XML-файлы, которые отправляются в мой API.
Моя проблема возникает при попытке прочитать эти файлы в 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 I 'мы пробовали разные вещи:
Попытка # 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-файлом:
Строка отладки
Но когда я пытаюсь загрузить в свой XML, я получаю эту ошибку: Debug Xml
Похоже, что по какой-то причине он принимает часть исходного пути к файлу со строкой или чем-то еще, но даже когда я пытаюсь вручную извлечь эту строку, он все равно даетта же ошибка.
Я что-то упускаю здесь очевидное?
Большое спасибо