Joh*_*ott 5 .net asp.net http-headers
我正在发布页面URL,例如mysite.com/disclaimer/someinfo此页面显示协议,如果用户单击"同意"按钮,则PDF文件将作为附件进行流式处理.
这样做的目的是用户可以共享此URL,但链接后的任何其他人也必须在下载文件之前阅读协议.实际文件没有URL,但保存在服务器的其他位置,因此下载文件的唯一方法是单击"[Agree]"按钮.
然而 - 我发现很难的是,点击按钮并开始下载后,我希望页面"消失".带按钮的页面保留在屏幕上.理想情况下,他们会被重定向回他们来自的页面.我渴望不需要javascript或cookies.引用者存储在初始页面加载到表单上的隐藏字段中.
我尝试了不同的方法,尝试在标题中写入307重定向,文件向用户发出警告,表明他们的帖子数据被重定向.我下面的代码仅适用于支持元刷新的浏览器(例如Firefox; IE7不支持Chrome/Safari)
我可以看到为什么这不起作用的逻辑.浏览器有一个响应,就是预期的文件.将文件发送给他们然后将浏览器重定向到另一个页面的正确方法是什么.用户pov感觉这个"接受"页面一旦点击按钮就会消失.
我有:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.UrlReferrer != null & Request.UrlReferrer.ToString() != "")
{
Uri referrer = Request.UrlReferrer;
if (!IsPostBack)
{ hfReferrer.Value = Request.UrlReferrer.ToString(); }
}
}
protected void buttonAccept_Click(object sender, EventArgs e)
{
//stream file
Node nodeCurrent = Node.GetCurrent();
string fileName = nodeCurrent.GetProperty("documentFile").Value.ToString();
System.IO.FileInfo file = new System.IO.FileInfo(fileName);
if (file.Exists) //set appropriate headers
{
Response.Clear();
if (hfReferrer.Value !="")
{Response.AddHeader("Refresh", string.Format("3; URL={0}", hfReferrer.Value));}
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/pdf";
// write file to browser
Response.WriteFile(file.FullName);
Response.End();
}
Run Code Online (Sandbox Code Playgroud)
我不想使用javascript /弹出窗口等.目前用户只需要点击一个链接转到另一个页面,但这感觉不太对.
理想情况下,我想遵循一个很好的标准.但我不知道在哪里看.
我建议尝试稍微不同的行为。在buttonAccept_Click 事件处理程序中,将用户重定向到感谢页面。在此感谢页面的 Page_Load 中包含下载文件的代码。这非常容易实现,并且为用户提供了更好的体验。
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |