C# 使用context.Response强制在新窗口中打开超链接
我有一个网页,上面有一些pdf文件的链接,例如 当用户单击这些链接时,身份验证开始生效,用户登录并可以下载文件。我试图实现的是在一个新窗口中打开下载 我对代码的访问/控制有限,无法将C# 使用context.Response强制在新窗口中打开超链接,c#,asp.net,C#,Asp.net,我有一个网页,上面有一些pdf文件的链接,例如 当用户单击这些链接时,身份验证开始生效,用户登录并可以下载文件。我试图实现的是在一个新窗口中打开下载 我对代码的访问/控制有限,无法将target=\u blank属性添加到href或添加任何javascript。认证后下载的代码如下: string filename = Path.GetFileName(context.Request.PhysicalPath); FileStream MyFileStream; long FileSize;
target=\u blank
属性添加到href或添加任何javascript。认证后下载的代码如下:
string filename = Path.GetFileName(context.Request.PhysicalPath);
FileStream MyFileStream;
long FileSize;
string strMapPath = context.Server.MapPath(filename);
MyFileStream = new FileStream(strMapPath, FileMode.Open);
FileSize = MyFileStream.Length;
//Allocate size for our buffer array
byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)FileSize);
MyFileStream.Close();
//Do buffer cleanup
context.Response.Buffer = true;
context.Response.Clear();
//Add the appropriate headers
context.Response.AddHeader("content-disposition",
"attachement filename=" + filename);
//Add the right contenttype
context.Response.ContentType = "application/pdf";
//Stream it out via a Binary Write
context.Response.BinaryWrite(Buffer);
我们是否可以强制在新窗口中打开
context.Response
?打开新窗口是客户端操作,而context.Response
是服务器端命令。要打开新窗口,您需要在客户端执行一些操作
如果无法更改原始页面源以运行脚本或更改HTML,则无法完成所需的操作。您可以在请求中返回一个页面,该页面包含打开新窗口的脚本,但它不会是相同的。您要么必须完全重新创建原始页面,除非添加了脚本(如果可以的话,我想您可以更改原始页面),要么使用不同的页面打开弹出窗口
唯一好的解决方案是更改原始页面,使用
target=“\u blank”
或向链接添加onclick处理程序的脚本添加弹出脚本。这两个都是你说你不能做的。打开一个新窗口是一个客户端操作,而Context.Response
是一个服务器端命令。要打开新窗口,您需要在客户端执行一些操作
如果无法更改原始页面源以运行脚本或更改HTML,则无法完成所需的操作。您可以在请求中返回一个页面,该页面包含打开新窗口的脚本,但它不会是相同的。您要么必须完全重新创建原始页面,除非添加了脚本(如果可以的话,我想您可以更改原始页面),要么使用不同的页面打开弹出窗口
唯一好的解决方案是更改原始页面,使用
target=“\u blank”
或向链接添加onclick处理程序的脚本添加弹出脚本。这两件事你都说你做不到。我知道这很老了,但下面是我为实现OP所做的
第一件事首先,看起来您的思路是正确的,但我注意到您拼写附件时有误,并且忘记在“附件”内容处置声明之后直接提供“;”
这是我使用的原始代码,它显示了与您描述的相同的行为
将您的内容处置声明更改为此
Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
附加注释
Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
- 如果将内容配置指定为“Inline”,它将输出 当前窗口中的文件内容
- 您需要将该配置更改为“附件”,并确保 扩展后缀已显式设置为.pdf
Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
附加注释
Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
- 如果将内容配置指定为“Inline”,它将输出 当前窗口中的文件内容
- 您需要将该配置更改为“附件”,并确保 扩展后缀已显式设置为.pdf