在这个站点和其他站点上的几个示例之后,我一直在努力使其工作几天,我认为我已经接近了,但还没有。
目标是能够从基于ASP.net核心的Web API将PDF文件下载到Angular Web应用程序。
这是API控制器的代码:
// GET: api/Invoices/File/5
[HttpGet("file/{id}")]
public IActionResult GetInvoiceFile([FromRoute] int id)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var invoices = _context.Invoices.Find(id);
if (invoices == null)
{
return NotFound();
}
else
{
string File2Return = "";
string Filename2Return = "";
File2Return = invoices.FilePath4Download;
Filename2Return = invoices.FileName;
//Change rout to match the route on the server
File2Return = "d:\\home" + File2Return.Substring(2);
var bytes = System.IO.File.ReadAllBytes(@File2Return);
return File(bytes, "application/octet-stream", Filename2Return);
}
}
这是我在Angular应用上使用的代码下载此文件:
// For invoice download
import * as saveAs from 'file-saver';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
...
...
...
let myUrl = this.data.InvoicesFileUrl +invoiceId.toString().trim();
this.http.get(myUrl).subscribe(
data => {
const dataFile = data;
saveAs(dataFile, 'document.pdf');
},
err => { console.info(err); }
);
如果我用Postman测试API调用,我可以看到控制器正在工作,并且它以流的形式返回PDF文件的内容。
但是当我使用上面的Angular代码尝试它时,似乎正在检测到错误。.有趣的是,在控制台上打印的错误是“确定”。
因此,即使从控制器收到的状态为200-ok(已通过Postman进行检查)... Angular仍认为这是一个错误,并且永远不会执行SaveAS()函数。
关于我在做什么错的任何想法?