使用Web API ASP Core将文件下载到Angular(200-OK ==错误??)

时间:2019-03-21 20:44:04

标签: angular asp.net-web-api asp.net-core

在这个站点和其他站点上的几个示例之后,我一直在努力使其工作几天,我认为我已经接近了,但还没有。

目标是能够从基于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()函数。

关于我在做什么错的任何想法?

0 个答案:

没有答案