ASP.NET下载文件使用浏览器并同时重定向到另一个页面

时间:2013-02-17 15:15:31

标签: javascript asp.net redirect

前段时间我在授权例程中有以下代码:

 protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            string returnUrl = Request.QueryString["ReturnUrl"];   
            if (!string.IsNullOrEmpty(returnUrl))
            {
                // download file from server

                Response.Redirect(returnUrl);
            }
        }

returnUrl是服务器上文件的完整路径,因此我以这种方式通过浏览器下载标准对话框下载文件。 但是现在我需要在授权后立即将用户重定向到另一个页面,同时下载文件。所以现在我需要像

这样的东西
{
    // download file from server
    Response.Redirect(returnUrl);
    Response.Redirect("/");
}

我无法找到正确的方法。我尝试了很多方法,但没有任何帮助。重要的注意事项是我不能使用仅用于下载的download.aspx等中间页面,然后重定向到必要的页面。 所以,我使用的方法:

1

Response.Redirect(returnUrl, false);
Response.Redirect("/");

结果:文件未下载,立即重定向。

2

Response.Redirect(returnUrl, false);
Response.Redirect("/", false);

结果:没有任何反应。

3

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + returnUrl);
Response.TransmitFile(Server.MapPath("~" + returnUrl));
Response.End();
Response.Redirect("/");

结果:文件已下载,但没有重定向。删除Response.End();重定向时,但文件未加载。

  1. 上一个变体,包含以下更改: 添加: Response.AddHeader(“Refresh”,“3; URL = / home.aspx”);
  2. 移除: 的Response.Redirect( “/”);

    结果:文件正在下载,但没有刷新/重定向。

    1. 使用javascript下载文件:
    2. Response.Write(“language ='javascript'> window.location.assign('returnUrl','download','');”); 的Response.Redirect( “/”);

      结果:文件未加载,重定向发生。 将Response.Write参数替换为"<script>alert('test');</script>"。没有警报,重定向发生。

      你知道吗,问题是什么?

1 个答案:

答案 0 :(得分:4)

我在asp.net论坛上得到了帮助,对here。 我已在授权用户必须重定向的页面上放置以下代码:

<%--We use iframe and script below for downloading files by not authorized users via direct links--%>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        iframeFile.Attributes["src"] = Request.QueryString["file"];
    }
</script>

 <asp:Content ContentPlaceHolderID="masterContent" runat="server">

    <div>
        <iframe id="iframeFile" runat="server" style="display: none;"></iframe>
    </div>

在登录页面的代码隐藏中,我编写了以下用于下载文件的片段:

string returnUrl = Request.QueryString["ReturnUrl"];
if (!string.IsNullOrEmpty(returnUrl))
{
    Response.Redirect("/?file=" + Server.UrlEncode(returnUrl));
}

现在问题解决了。