Я публикую URL-адрес страницы, например, mysite.com/disclaimer/someinfo, на этой странице отображается соглашение, и если пользователь нажимает кнопку согласия, файл PDF передается в виде вложения.
ЦельЭто значит, что пользователь может поделиться этим URL, но любой, кто переходит по ссылке, должен также прочитать соглашение перед загрузкой файла.Фактический файл не имеет URL-адреса, но хранится в другом месте на сервере, поэтому единственный способ загрузить файл - это нажать кнопку «Согласен».
Тем не менее, сложность заключается в том, чтопосле нажатия кнопки и начала загрузки, я бы хотел, чтобы страница «ушла».Страница с кнопками остается на экране.В идеале они будут перенаправлены обратно на страницу, с которой пришли.Я стремлюсь не требовать JavaScript или куки.Реферрер сохраняется при начальной загрузке страницы в скрытое поле в форме.
Я пробовал разные подходы, пытаясь написать редирект 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();
}
Я бы предпочел не использовать javascript/ всплывающие окна и т. д. В настоящее время пользователю просто нужно щелкнуть ссылку, чтобы перейти на другую страницу, но это не совсем правильно.
В идеале я хотел бы придерживаться хорошего стандарта для этого.Но я не уверен, где искать.