前段时间我在授权例程中有以下代码:
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();
重定向时,但文件未加载。
移除: 的Response.Redirect( “/”);
结果:文件正在下载,但没有刷新/重定向。
Response.Write(“language ='javascript'> window.location.assign('returnUrl','download','');”); 的Response.Redirect( “/”);
结果:文件未加载,重定向发生。
将Response.Write
参数替换为"<script>alert('test');</script>"
。没有警报,重定向发生。
你知道吗,问题是什么?
答案 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));
}
现在问题解决了。