Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用context.Response强制在新窗口中打开超链接_C#_Asp.net - Fatal编程技术网

C# 使用context.Response强制在新窗口中打开超链接

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;

我有一个网页,上面有一些pdf文件的链接,例如

当用户单击这些链接时,身份验证开始生效,用户登录并可以下载文件。我试图实现的是在一个新窗口中打开下载

我对代码的访问/控制有限,无法将
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


我知道这很古老,但以下是我为实现OP所做的工作

第一件事首先,看起来您的思路是正确的,但我注意到您拼写附件时有误,并且忘记在“附件”内容处置声明之后直接提供“;”

这是我使用的原始代码,它显示了与您描述的相同的行为

将您的内容处置声明更改为此

Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
附加注释

Response.AddHeader("Content-Disposition", "attachment; filename=" + docName + ".pdf");
  • 如果将内容配置指定为“Inline”,它将输出 当前窗口中的文件内容

  • 您需要将该配置更改为“附件”,并确保 扩展后缀已显式设置为.pdf


为什么不响应.WriteFile?为什么不能使用target=\u blank。你能解释一下原因吗。我想,使用HTTP处理程序可以解决你的问题。你能给我一个例子吗?Response.WriteFile如何在新窗口中打开链接?Thanksuryakiran-我正在使用httphandler拦截请求,并在用户登录后将用户重定向到登录页面,上面的代码用于下载文件executesCan您可以使用这样的技巧吗<代码>响应.Write(“window.open”(“+FilePath+”,“\u blank”);”通过这种方式,您可以在一个空目标中添加动态JS,而无需触摸基本代码。为什么不响应。WriteFile?为什么不能使用target=\u blank。你能解释一下原因吗。我想,使用HTTP处理程序可以解决你的问题。你能给我一个例子吗?Response.WriteFile如何在新窗口中打开链接?Thanksuryakiran-我正在使用httphandler拦截请求,并在用户登录后将用户重定向到登录页面,上面的代码用于下载文件executesCan您可以使用这样的技巧吗<代码>响应.Write(“window.open”(“+FilePath+”,“\u blank”);”通过这种方式,您可以在不接触基本代码的情况下,将动态JS添加到页面的空白目标中。