C# 使用.net核心API将XML文件下载到本地计算机

C# 使用.net核心API将XML文件下载到本地计算机,c#,filesystems,asp.net-core-webapi,.net-core-2.2,C#,Filesystems,Asp.net Core Webapi,.net Core 2.2,我在将XML文件从C#model下载/导出到浏览器的本地机器(我有前端)时遇到了问题。 不过,我能够将文件从C#model下载/导出到XML,并将其保存在服务器上的目录中 我正在使用以下代码: var gradeExportDto = Mapper.Map<GradeExportDto>(responseGradeDto); System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.Xm

我在将XML文件从C#model下载/导出到浏览器的本地机器(我有前端)时遇到了问题。 不过,我能够将文件从C#model下载/导出到XML,并将其保存在服务器上的目录中

我正在使用以下代码:

var gradeExportDto =  Mapper.Map<GradeExportDto>(responseGradeDto);
System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
var path = _configuration.GetValue<string>(AppConstants.IMPORT_EXPORT_LOCAL_URL) + "\\"+ responseGradeDto.Code+"_"+DateTime.UtcNow.ToString("yyyy-MM-dd") + ".xml";
System.IO.FileStream file = System.IO.File.Create(path);
writer.Serialize(file, gradeExportDto);
file.Close();
我需要帮助将此文件下载到运行浏览器的本地系统。 如果需要我方提供更多信息,请告诉我。
注意:我没有试图下载现有的文件。我有一个C语言的模型,我需要将它转换成XML,然后下载到本地服务器。但是,我可以将其转换为XML,但无法在本地下载。

您无法将任何内容直接保存到客户端计算机。您所能做的就是提供该文件作为对请求的响应,然后通常会在客户端上提示下载对话框,允许他们选择将其保存在本地计算机上的某个位置

@croxy将您链接到的是如何返回这样的响应。如果问题是答案使用的是现有文件,则可以忽略该部分。这样做的目的是返回一个
字节[]
,而不管它实际来自何处。如果要在内存中创建XML,则只需执行以下操作:

return File(memoryStream.ToArray(), "application/xml", "file.xml");

无法将任何内容直接保存到客户端计算机。您所能做的就是提供该文件作为对请求的响应,然后通常会在客户端上提示下载对话框,允许他们选择将其保存在本地计算机上的某个位置

@croxy将您链接到的是如何返回这样的响应。如果问题是答案使用的是现有文件,则可以忽略该部分。这样做的目的是返回一个
字节[]
,而不管它实际来自何处。如果要在内存中创建XML,则只需执行以下操作:

return File(memoryStream.ToArray(), "application/xml", "file.xml");

不要将数据序列化为文件,而是将其序列化为流,例如
MemoryStream
并从操作返回
文件()

public IActionResult GetXml()
{
    var gradeExportDto =  Mapper.Map<GradeExportDto>(responseGradeDto);
    var writer = new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
    var stream = new MemoryStream();
    writer.Serialize(stream, gradeExportDto);

    var fileName = responseGradeDto.Code + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd") + ".xml";

    return File(stream.ToArray(), "application/xml", fileName);
}
public IActionResult GetXml()
{
var gradeExportDto=Mapper.Map(responseGradeDto);
var writer=new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
var stream=newmemoryStream();
序列化(流,gradeExportDto);
var fileName=responseGradeDto.Code+“”+DateTime.UtcNow.ToString(“yyyy-MM-dd”)+“.xml”;
返回文件(stream.ToArray(),“application/xml”,文件名);
}

不要将数据序列化为文件,而是将其序列化为流,例如
MemoryStream
并从操作返回
文件()

public IActionResult GetXml()
{
    var gradeExportDto =  Mapper.Map<GradeExportDto>(responseGradeDto);
    var writer = new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
    var stream = new MemoryStream();
    writer.Serialize(stream, gradeExportDto);

    var fileName = responseGradeDto.Code + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd") + ".xml";

    return File(stream.ToArray(), "application/xml", fileName);
}
public IActionResult GetXml()
{
var gradeExportDto=Mapper.Map(responseGradeDto);
var writer=new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
var stream=newmemoryStream();
序列化(流,gradeExportDto);
var fileName=responseGradeDto.Code+“”+DateTime.UtcNow.ToString(“yyyy-MM-dd”)+“.xml”;
返回文件(stream.ToArray(),“application/xml”,文件名);
}

正在从某个位置读取该解决方案文件中可能存在的@croxy副本。在我的情况下,我没有任何文件可以从某些地方读取。我有一个c#类模型,我正在将其转换为XML格式。我还能够将该XML保存为服务器上的.XML文件。我的问题是我想将其保存在本地而不是服务器上。正在从某个位置读取该解决方案文件中可能存在的@croxy副本。在我的情况下,我没有任何文件可以从某些地方读取。我有一个c#类模型,我正在将其转换为XML格式。我还能够将该XML保存为服务器上的.XML文件。我的问题是我想把它保存在本地而不是服务器上。我在前端遇到了以下错误。错误:SyntaxError:JSON中位于JSON.parse位置0的意外标记<我的前端位于angular 6.Yes中。我的下载工作正常,但它正在将文件保存到服务器。@Shardul如果调用上述API方法,下载提示是否打开?正如Chris Pratt已经指出的,您不能直接将文件保存到客户机。它应该打开一个下载提示,用户可以在其中选择保存选项和路径。@Shardul上面提到的错误听起来像是您以angular格式下载文件并尝试将其解析为json。不,下载提示不在那里。文件正在直接保存。我在前端遇到以下错误。错误:SyntaxError:JSON中位于JSON.parse位置0的意外标记<我的前端位于angular 6.Yes中。我的下载工作正常,但它正在将文件保存到服务器。@Shardul如果调用上述API方法,下载提示是否打开?正如Chris Pratt已经指出的,您不能直接将文件保存到客户机。它应该打开一个下载提示,用户可以在其中选择保存选项和路径。@Shardul上面提到的错误听起来像是您以angular格式下载文件并尝试将其解析为json。不,下载提示不在那里。正在直接保存文件。如何获得下载提示?目前我没有显示任何提示。我已在appsettings.json中配置了路径,因此将在该位置保存。如何获得下载提示?目前我没有显示任何提示。我已在appsettings.json中配置了路径,因此将在该位置保存。