ASP.NET Core返回文件并从同一操作重定向

时间:2018-07-17 19:24:30

标签: asp.net asp.net-mvc asp.net-core .net-core

我需要执行以下流程:用户将一些数据发布到操作中,然后接收文本文件并重定向到另一个操作。

因此,我需要在同一响应中返回两个“结果” FileRedirectToAction。有解决方案吗?

2 个答案:

答案 0 :(得分:2)

首先建立这样的模型:

public class FileAndRedirect {

    public string FileContentAsBase64 { get; set; } 
    public string FileName { get; set; }
    public string RedirectURL { get; set; }

}

然后查看:

@model FileAndRedirect

<a style="display:none" id="linker" href="data:application/octet-stream;charset=utf-8;base64,@Model.FileContentAsBase64" download="@Model.FileName"></a>


<style>

    document.getElementById("linker").click();

    window.location = "@Model.RedirectURL";

</style>

现在您可以返回视图:

return View(new FileAndRedirect{ ... })

答案 1 :(得分:0)

通过根据内维尔·纳泽拉内(Neville Nazerane)的答案返回带有下载和重定向代码的html内容来解决此问题

return Content("<!DOCTYPE html>" +
    "<html><head></head><body>" +                          
    $"<a style=\"display:none\" id=\"linker\" href=\"data:application/octet-stream;charset=utf-8;base64,{Convert.ToBase64String(Encoding.UTF8.GetBytes(fileData))}\" download=\"filename.txt\"></a>" +
    "</body>" +
    "<script>document.addEventListener('DOMContentLoaded', function(){document.getElementById('linker').click(); window.location='/'}, false);</script>" +
    "</html>", "text/html");