2016-07-28 69 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”);

相关问题