我正在开发一个asp.net - MVC应用程序并遇到以下问题: 当用户键入特定网址时,在我的情况下:
http://localhost/Download
我希望它转到action方法,下载文件然后导航到action方法的相应视图:
我的代码看起来像这样:
public ActionResult Index()
{
string filePath = WebConfigurationManager.AppSettings["Download"];
FileInfo file = new FileInfo(filePath);
if (file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "text/plain";
Response.TransmitFile(file.FullName);
Response.Flush();
Response.End();
}
return View();
}
我的观点看起来很简单:
@{
ViewBag.Title = "Index";
}
<h2>Downloading ...</h2>
当我运行它时,我得到了该文件,但它没有导航到视图,而是保留在上一个URL中。
编辑 - 答案: 感谢@Abbas Galiyakot 他的回复。
以下是执行我想要的更新代码:
public ActionResult Index()
{
return View();
}
public ActionResult DownloadFile()
{
string filePath = WebConfigurationManager.AppSettings["Download"];
FileInfo file = new FileInfo(filePath);
if (file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "text/plain";
Response.TransmitFile(file.FullName);
Response.Flush();
Response.End();
}
return new EmptyResult();
}
@{
ViewBag.Title = "Index";
}
<h2>Downloading...</h2>
<script type="text/javascript">
window.location.href = '@Url.Action("DownloadFile", "Home")';
</script>
答案 0 :(得分:2)
每个HTTP请求只能有一个响应 - 你试图偷偷进入两个(文件和一个页面)。
通常,当您发送“Content-Disposition:attachment”HTTP标头时,浏览器将保留在当前页面上并弹出文件保存对话框(或自动将文件保存在您的下载中)。
您将不得不改变策略。在新窗口中打开此页面(下载文件)并使用javascript进行重定向。