0

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

 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");

移除:Response.Redirect("/");

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

  1. 使用 javascript 下载文件:

Response.Write("language='javascript'>window.location.assign('returnUrl','download', '');"); Response.Redirect("/");

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

你知道,有什么问题吗?

4

1 回答 1

4

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

<%--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));
}

现在问题解决了。

于 2013-02-24T11:57:06.387 回答