2016-07-28 4 views
0

Ich habe die folgende Methode in einer ASP.NET Core-Anwendung, die eine Datei generiert und die Datei zurückgibt.Zurückgeben von Cookies aus einer ASP.NET Core App

[HttpPost] 
    public ActionResult Export(string data) 
    { 
     if (string.IsNullOrEmpty(data)) return View(); 

     const string contentType = "Application/msexcel"; 
     var fileName = "Export On " + DateTime.Now.ToString("MM-dd-yyyy hh:mm") + ".xlsx"; 
     var ms = ExportControllerService.Export(data, ref fileName, User.Identity.Name); 

     var file = File(ms, contentType, fileName); 
     var result = (ActionResult) file; 
     return ms != null ? result : View(); 
    } 

Ich möchte auch ein Cookie mit dieser Datei zurückgeben. In einer früheren Version von ASP.NET habe ich so etwas wie die folgenden

  var result = workbook.SaveAsActionResult(string.Format("export-{0}.xlsx", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss")), HttpContext.ApplicationInstance.Response, 
       ExcelDownloadType.PromptDialog, ExcelHttpContentType.Excel2010); 
      result.Response.SetCookie(new HttpCookie(ExportHelpers.DownloadCookieName, "true") { Path = "/" }); 

Beachten Sie, dass ich die Action nehme, die mit der Antworteigenschaft wird erzeugt und in Unordnung, das Cookie zu setzen.

Um Ihnen den vollen Hintergrund zu geben, was ich tue, ist auf einer Seite Ich habe ein verstecktes IFrame, wenn diese Exportmethode aufgerufen wird, was ich mache, wird das versteckte IFrame zurückgeben, das diese Methode aufruft und dann wenn es fertig ist Es zeigt die Datei auf dem Client an und lässt den Bildschirm intakt. Der Grund, warum ich diesen Cookie haben möchte, ist, dass während des Exports eine Statusleiste auf dem Bildschirm angezeigt wird und ich wissen muss, wann die Datei fertig generiert wurde und bereit ist, auf dem Client geöffnet zu sein, so dass ich dies ausgeblendet habe Statusleiste.

Antwort

0

Ich denke, Sie werden wissen, dass die Datei den Export beendet hat und bereit ist, heruntergeladen zu werden, da der POST beendet wurde. Ich sehe keine Notwendigkeit, diese Art von Informationen in einem Cookie zu speichern. Cookies sollten verwendet werden, um Informationen über einen Benutzer zu speichern, die zwischen Seitenladevorgängen oder Standortbesuchen bestehen bleiben müssen.

ETA: Vielleicht möchten Sie Ihren Front-End-Code aufstellen, da das scheint, wo das Problem liegt.

+0

Da es sich um einen Datei-Download handelt, ist am Frontend nichts dabei. Es ist einfach ein IFrame mit einem Textfeld und einer Schaltfläche, um es zu übermitteln. Wenn es mit einem Inhaltstyp der Datei zurückkommt, wird nichts in der Benutzeroberfläche ausgelöst. –

+0

Gibt es einen Grund, warum du keinen Ajax-Post dafür verwenden kannst, da dies die gesuchte Funktionalität zu sein scheint? – Rosemary

+0

Ich habe es mit dem folgenden funktionieren: HttpContext.Response.Cookies.Append ("CranalyticsExportStatus", "ExportComplete"); –

0

Ich habe es mit dem folgenden funktioniert: HttpContext.Response.Cookies.Append ("CranalyticsExportStatus", "ExportComplete");

Verwandte Themen