J'ai une liste d'objets que je souhaite télécharger sous forme de fichier csv via Web Api. Cependant, lorsque je teste cela avec Swagger, je n'obtiens pas de téléchargement csv. Qu'est-ce que je fais mal? DailyReportContent contient 2 objets.
Voici mon code pour l'instant:
stream.Flush(); streamWriter.Flush(); var reader = new StreamReader(stream); var readResult = reader.ReadToEnd();
Et voici la réponse dans Swagger:
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {
"headers": [
{
"key": "Content-Type",
"value": [
"text/csv"
]
},
{
"key": "Content-Disposition",
"value": [
"attachment; filename=DailyReports.csv"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
EDIT: Même si j'ajoute ceci:
public IActionResult GetDailyReport(DateTime invoiceDate)
{
var dailyReportContent = new List<DailyReportModel>().....
// create csv file
var engine = new FileHelperEngine<DailyReportModel>
{
HeaderText = "headers.."
};
using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream))
{
engine.WriteStream(streamWriter, dailyReportContent);
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "DailyReports.csv" };
return Ok(result);
}
}
Le readResult est vide. Donc je suppose qu'il y a un problème lors de l'écriture du flux?
3 Réponses :
Je pense que vous devez
return result;
Renvoyer "Ok (
Non, ça n'aide pas. me donne exactement la même réponse et aucun fichier csv de téléchargement. :(
Que faire si vous appelez le point de terminaison avec un navigateur - le fichier est-il téléchargé?
Corrigé comme ceci:
var csvContent = LoadcsvContent();
var engine = new FileHelperEngine<DailyReportModel>
{
HeaderText = "......."
};
var stream = new MemoryStream();
TextWriter streamWriter = new StreamWriter(stream);
engine.WriteStream(streamWriter, csvContent);
streamWriter.Flush();
stream.Seek(0, SeekOrigin.Begin);
return File(await stream, "text/csv", $"Report_{invoiceDate:yyyyMMdd}.csv");
Fonctionne comme un charme maintenant. Sortie Swagger:
Dans ASP.NetCore, nous avons return File (ret, "application / octet-stream", fileName);
Renvoyer un fichier avec le type dont nous avions besoin, dans mon cas pour un package .msi j'utilise "application / octet-stream" pour vous, vous pouvez soit spécifier le type de retour comme .CSV ici dans niveau contrôleur ou au niveau global dans la classe WebApiConfig pour Formatters