从Axios请求以ASP.NET Core API返回下载文件

App*_*mmy 2 c# asp.net-web-api asp.net-core axios

大家好

我正在尝试从Axios Request从ASP.NET Core Web API下载文件。

这是我的示例API方法。(基于此stackoverflow问题的代码)

[HttpPost("download")]
public async Task<IActionResult> DownloadFile(){
    ...
    return File(new MemoryStream(mypdfbyte), "application/octet-stream", "myfile.pdf");
}
Run Code Online (Sandbox Code Playgroud)

这是我的示例axios请求。

axios.post(`api/products/download`).then(response=>{
    console.log(response.data)
}).catch(error=>{ console.log(error) })
Run Code Online (Sandbox Code Playgroud)

但是我只收到这个。没有下载文件出现。

在此处输入图片说明

希望您能帮助我从控制器api下载文件。

kri*_*iss 5

首先,DownloadFile应该是HttpGet而不是HttpPost。然后您的axios请求应该看起来像

axios({
  url: 'http://localhost:5000/api/products/download',
  method: 'GET',
  responseType: 'blob', // important
}).then((response) => {
  const url = window.URL.createObjectURL(new Blob([response.data]));
  const link = document.createElement('a');
  link.href = url;
  link.setAttribute('download', 'file.pdf');
  document.body.appendChild(link);
  link.click();
});
Run Code Online (Sandbox Code Playgroud)

  • 先生,它与“post”也完美配合。谢谢你,先生。现在可以了:) (2认同)
  • @AppleCiderYummy 这不是重点。它应该是一个 get 请求,因为 REST 规范如何定义 get 和 post 请求的功能。尽管从技术上讲可以使用任何动词执行任何操作,但 Get 请求从服务器读取数据。Post 请求用于在服务器上创建新资源。通过使用帖子来执行应该得到的内容,就像在英语中使用了错误的单词,但仍然让人们理解你想说的内容。而且以后推理代码会更加困难。 (2认同)