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