从 ASP.NET CORE Web Api 获取 React 中的特定响应标头(例如 Content-Disposition)

Rox*_*Pro 5 javascript c# reactjs asp.net-core asp.net-core-webapi

我正在从控制器返回一个文件WebAPI。标Content-Disposition头值会自动填充,并且还包含我的文件名。

我的后端代码如下所示:

[HttpGet("Download")]
public async Task<ActionResult> Download([FromQuery]CompanySearchObject req)
{
    string fileName = "SomeFileName_" + DateTime.UtcNow.Date.ToShortDateString() + ".csv";

    var result = await _myService.GetData(req);

    Stream stream = new System.IO.MemoryStream(result);

    return File(stream, "text/csv", fileName.ToString());
}
Run Code Online (Sandbox Code Playgroud)

在我的前端:

exportData(params).then(response => {
      console.log(response);
      console.log('Response Headers:', response.headers);
      const type = response.headers['content-type'];
      const blob = new Blob([response.data], { type: type, encoding: 'UTF-8' });
      //const filename = response.headers['content-disposition'].split('"')[1];
      //alert(filename);
      const link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = 'file.xlsx';
      link.click();
      link.remove();
   });
};
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我正在努力获取这些数据,因为当我在前端执行 console.log 时,我看不到这个..正如你所看到的,我记录了响应,console.log('Response Headers:', response.headers);但我唯一看到的是:

在此输入图像描述

这些数据不应该在某个地方吗?我想知道如何从中读取值Content-Disposition并获取文件名?

谢谢大家干杯

Kac*_*992 7

有同样的问题。我的问题是 CORS。如果您正在使用它,则需要在配置中像这样公开它:

app.UseCors(builder =>
            {
                builder.AllowAnyOrigin();
                builder.AllowAnyMethod();
                builder.AllowAnyHeader();
                builder.WithExposedHeaders("Content-Disposition"); // this is the important line
            });
Run Code Online (Sandbox Code Playgroud)


Tao*_*hou 2

对于获取响应标头,它返回的是一个可迭代对象,您必须循环response.headers而不是log response.headers object.

尝试下面的代码:

response.headers.forEach(console.log);
console.log(response.headers.get('content-disposition'));
Run Code Online (Sandbox Code Playgroud)