我在.Net Core API中创建了一个控制器,以便创建一个带有软件包iTextSharp的文件并将pdf文件发送给用户。当我使用Swagger进行测试时,因为它已在项目中实现,因此效果很好,但是当我想在我的角度应用程序中使用控制器时,它就无法工作。
我的C#控制器:
[HttpPost("[Action]")]
public IActionResult CreateLicensePDF(License license) {
GenerateLicenseFIleService generateLicenseFIleService = new GenerateLicenseFIleService();
byte[] abytes = generateLicenseFIleService.Generate(license);
string fileName = license.Customer.CustomerNumber + "-" + license.Order.OrderNumber + ".pdf";
return File(abytes, "application/pdf", fileName);
}
调用api网址以在我的angular应用程序中执行控制器的服务:
generateLicensePDF(license){
return this.http.post(`${this.config.catchApiUrl()}GenerateFile/CreateLicensePDF`,license);
}
单击按钮后,它将执行此功能以调用服务
onSubmit(){
// get a license by id and it's return license's data
this.licenseInfoService.getLicenseById(1).subscribe(
r => {// call the service which download the file
this.licenseInfoService.generateLicensePDF(r).subscribe(
r => console.log("yeah"),
err => console.log(err))
}
}
我尝试了很多事情,但错误始终是:
返回HttpErrorMessage,此错误消息的状态为400
“”:[[ 输入无效。
或:
它返回HttpErrorMessage,此错误消息的状态为200
SyntaxError:JSON中意外的令牌%在XMLHttpRequest.onLoad的JSON.parse()位置0处
答案 0 :(得分:1)
如何设置responseType:
generateLicensePDF(license){
return this.http.post(`${this.config.catchApiUrl()}GenerateFile/CreateLicensePDF`,license, { responseType: 'blob' });
}
然后您可以安装Angular FileSaver:
npm install file-saver --save
然后:
import { saveAs } from 'file-saver';
onSubmit(){
// get a license by id and it's return license's data
this.licenseInfoService.getLicenseById(1).subscribe(
r => {// call the service which download the file
this.licenseInfoService.generateLicensePDF(r).subscribe(
x => {
saveAs(x);
console.log("yeah")
},
err => console.log(err))
}
}
这将使您获得服务的 Blob 结果,并使用saveAs
将其下载到计算机上。如果您想获得文件响应,可以使用:
this.http.post(`${this.config.catchApiUrl()}GenerateFile/CreateLicensePDF`,license, { observe: 'response', responseType: 'blob' });
然后可以使用以下命令保存文件:
saveAs(r.body)
我希望这对您有帮助...