2016-07-28 24 views
0

我在ASP.NET Core應用程序中生成一個文件並返回該文件的方法如下。如何從ASP.NET核心應用程序傳回Cookie

[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(); 
    } 

我想要做的也是傳回一個cookie與此文件。在以前版本的ASP.NET的我不喜歡的東西,我要帶獲取生成的的ActionResult,並與響應屬性來設置cookie搞亂以下

  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 = "/" }); 

通知。

爲了給你提供完整的背景我正在做的是在一個頁面上我有一個隱藏的IFrame,當這個Export方法被調用時我所做的是回發隱藏的IFrame,它調用這個方法,然後一旦完成它會在客戶端顯示打開/下載的文件,使屏幕保持不變。我想擁有這個cookie的原因是,在導出時,我在屏幕上顯示一個狀態欄,我需要知道文件何時生成並準備在客戶端打開,以便隱藏狀態欄。

回答

0

我想你會知道該文件已完成導出,並準備通過POST已完成執行的事實進行下載。我不認爲有必要將這類信息放入cookie中。應該使用Cookie來存儲有關用戶需要在頁面加載或網站訪問之間持續存在的信息。

ETA:您可能想要放置您的前端代碼,因爲這似乎是問題所在。

+0

因爲它是一個文件下載,所以前端沒有任何內容。它只是一個帶有文本框和按鈕的IFrame來提交它。當它返回文件的內容類型時,UI中沒有任何內容會觸發。 –

+0

是否有一個原因,你不能使用ajax後,因爲這似乎是你正在尋找的功能? – Rosemary

+0

我得到它與以下工作:HttpContext.Response.Cookies.Append(「CranalyticsExportStatus」,「ExportComplete」); –

0

我得到它與以下工作:HttpContext.Response.Cookies.Append(「CranalyticsExportStatus」,「ExportComplete」);

相關問題