So Exportieren Sie CSV-Datei aus ASP.NET Kern

Ich versuche zum migrieren von code aus ASP.net zu ASP.net core.

Wo, wie in ASP.net war der code wie unten

var progresses = db.Progresses.Where(p => p.UserId == id).Include(p => p.User.UserMetaData).Include(p => p.Quiz).Include(p => p.User.Groups).OrderByDescending(p => p.UpdatedAt).ToList();

List<ReportCSVModel> reportCSVModels = new List<ReportCSVModel>();
const string downloadName = "Reports.csv";
var csv = new CsvWriter(Response.Output);

csv.Configuration.RegisterClassMap<ReportCSVMap>();

Response.ClearContent();

Response.ContentType = "application/octet-stream";

Response.AddHeader("Content-Disposition",
   "attachment; filename=" + downloadName);

csv.WriteHeader<ReportCSVModel>();
foreach (var progress in progresses)
{
    var reportCSVModel = new ReportCSVModel();
    reportCSVModel.Quiz = progress.Quiz.Title;
    reportCSVModel.Score = (progress.CorrectAnswersCount * progress.PointsPerQuestion).ToString();
    reportCSVModel.Status = progress.Status;
    reportCSVModel.CompletedDate = progress.UpdatedAt.ToString();
    reportCSVModel.Location = progress.User.UserMetaData != null ? progress.User.UserMetaData.Location : "";
    reportCSVModel.Group = progress.User.Groups.FirstOrDefault() != null ? progress.User.Groups.FirstOrDefault().Name : "";

    csv.WriteRecord<ReportCSVModel>(reportCSVModel);
}
Response.Flush();
Response.End();
return null;

Aber während Sie es in ASP.NET core, ich Konvertierte, wie es,

var progresses = _elearnContext.Progress.Where(p => p.UserId == id).Include(p => p.User.UserMetaData).Include(p => p.Quiz).Include(p => p.User.Groups).OrderByDescending(p => p.UpdatedAt).ToList();

//List<ReportCSVModel> reportCSVModels = new List<ReportCSVModel>();
List<ReportCSVModel> reportCSVModels = new List<ReportCSVModel>();
const string downloadName = "Reports.csv";

System.IO.TextWriter writeFile = new StreamWriter(Response.Body.ToString());
CsvWriter csv = new CsvWriter(writeFile);
csv.Configuration.RegisterClassMap<GroupReportCSVMap>();
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.Headers.Add("Content-Disposition", "attachment; filename=" + downloadName);


csv.WriteHeader<ReportCSVModel>();
foreach (var progress in progresses)
{
    var reportCSVModel = new ReportCSVModel();
    reportCSVModel.Quiz = progress.Quiz.Title;
    reportCSVModel.Score = (progress.CorrectAnswersCount * progress.PointsPerQuestion).ToString();
    reportCSVModel.Status = progress.Status;
    reportCSVModel.CompletedDate = progress.UpdatedAt.ToString();
    reportCSVModel.Location = progress.User.UserMetaData != null ? progress.User.UserMetaData.Location : "";
    reportCSVModel.Group = progress.User.Groups.FirstOrDefault() != null ? progress.User.Groups.FirstOrDefault().Name : "";

    csv.WriteRecord<ReportCSVModel>(reportCSVModel);
}

Response.Clear();
return null;

In ASP.net wo Response.Output ist verfügbar, aber es ist nicht verfügbar in der core. Also versuchte ich, es zu benutzen, wie Response.Body

Kann mir Jemand sagen, wo ich falsch gemacht habe?

InformationsquelleAutor ROHIT BORUDE | 2018-10-10



One Reply
  1. 4

    Ändern Sie ggf. den Ansatz ausrichten mehr mit aktuellen vorgeschlagenen syntax.

    Konstruieren Sie die CSV-und die Rückkehr einer FileResult, die es erlauben, den code nicht direkt ändern Response Objekt.

    [HttpGet]
    public IActionResult MyExportAction() {
        var progresses = _elearnContext.Progress.Where(p => p.UserId == id)
            .Include(p => p.User.UserMetaData)
            .Include(p => p.Quiz)
            .Include(p => p.User.Groups)
            .OrderByDescending(p => p.UpdatedAt)
            .ToList()
            .Select(progress => 
                new ReportCSVModel() {
                    Quiz = progress.Quiz.Title,
                    Score = (progress.CorrectAnswersCount * progress.PointsPerQuestion).ToString(),
                    Status = progress.Status,
                    CompletedDate = progress.UpdatedAt.ToString(),
                    Location = progress.User.UserMetaData != null ? progress.User.UserMetaData.Location : "",
                    Group = progress.User.Groups.FirstOrDefault() != null ? progress.User.Groups.FirstOrDefault().Name : ""
                }
            );
    
        List<ReportCSVModel> reportCSVModels = progresses.ToList();
    
        var stream = new MemoryStream();
        var writeFile = new StreamWriter(stream);
        var csv = new CsvWriter(writeFile);
        csv.Configuration.RegisterClassMap<GroupReportCSVMap>();
    
        csv.WriteRecords(reportCSVModels);
    
        stream.Position = 0; //reset stream
        return File(stream, "application/octet-stream", "Reports.csv");
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.