Ho questo metodo WebAPI, che accetta un oggetto personalizzato MyType
come input e genera un PDF basato su quello. Il file PDF viene restituito come HttpResponseMessage
. Si noti che ho specificare il nome del file sul response.Content.Headers.ContentDisposition.FileName
:Come recuperare HttpResponseMessage FileName in JavaScript
ASP.NET WebAPI
[Route("")]
public HttpResponseMessage Get([FromUri]MyType input)
{
var pdfContent = PdfGenerator.Generate(input);
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = pdfContent;
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "MyCustomFileName.pdf"
return response;
}
In AngularJS vado a prendere il file utilizzando FileSaver.js come questo:
$http.get("api/pdf/", {
params: {
"type": myObject
},
responseType: 'arraybuffer'
}).then(function (results) {
var data = results.data;
var file = new Blob([data], { type: 'application/pdf' });
saveAs(file, 'filename.pdf');
}, function (results) {
console.log(results);
});
funziona come eccettuato, ma Sto definendo il nome del file sia su WebAPI che in JavaScript. C'è un modo, che io possa recuperare il FileName definito in WebAPI nella variabile results
in JavaScript?
Questa soluzione di cui sopra non funziona in Chrome poiché restituisce solo le intestazioni 'Cache-Control' e' Content-Type'. Ecco il mio post per maggiori dettagli http://stackoverflow.com/questions/39825590/web-api-is-not-returning-the-contentdisposition-filename –
Il commento precedente è sbagliato perché, come è ovvio dalla risposta di la domanda collegata, il problema nella domanda non è Chrome, ma il fatto che la richiesta sia CORS e necessita di autorizzazione esplicita per accedere alle intestazioni. –