C# MVC4-从动作返回pdf文件会使浏览器加载动作两次

C# MVC4-从动作返回pdf文件会使浏览器加载动作两次,c#,asp.net-mvc,pdf,C#,Asp.net Mvc,Pdf,我有一个操作,它生成一个.pdf文档,并返回该文档以便在浏览器上内联查看。问题是,浏览器对同一操作发出第二个请求,这导致应用程序在每次生成文件时执行两次操作。这就是我所拥有的 public ActionResult GeneratePDF(string id, int rp = 1, string info = "") { var doc = _service.GeneratePDF(id, rp, info); var cd = new System.Net.M

我有一个操作,它生成一个
.pdf
文档,并返回该文档以便在浏览器上内联查看。问题是,浏览器对同一操作发出第二个请求,这导致应用程序在每次生成文件时执行两次操作。这就是我所拥有的

public ActionResult GeneratePDF(string id, int rp = 1, string info = "")
{        
    var doc = _service.GeneratePDF(id, rp, info);
    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = $"{id}.pdf",
        Inline = true,
        Size = tickets.Length
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(doc, MimeMapping.GetMimeMapping(cd.FileName));
}
\u service.GeneratePDF
使用iTextSharp和
MemoryStream
对象生成内存中的PDF,该对象返回一个
字节[]

GeneratePDF操作从其他页面中的链接调用:

此新浏览器选项卡上显示的唯一内容是
.pdf
文档

我在不同的浏览器(Chrome、IE、FF)上进行了尝试,结果是相同的,
.pdf
文件在浏览器上正确显示,但需要再次调用相同的操作。关于如何防止浏览器调用该操作两次,您有什么想法吗?标题上有什么遗漏吗

编辑:浏览器行为
第一个请求是正常的,完成时没有问题。第二个命令执行操作,但浏览器(或其他东西)取消该请求。

您找到解决方案了吗? 我也有同样的问题。生成pdf文件的操作。此操作被调用两次


我将内容配置更改为附件而不是内联,没关系,该操作只调用一次。当然,文件会被保存,不会显示在浏览器中。

您找到解决方案了吗? 我也有同样的问题。生成pdf文件的操作。此操作被调用两次


我将内容配置更改为附件而不是内联,没关系,该操作只调用一次。当然,文件会被保存,不会显示在浏览器中。

我也遇到了同样的问题。请记住,我不知道如何真正阻止这种情况发生,但我已经想出了一个解决办法,如果这有帮助的话。我查看了这两个请求,并注意到第二个“伪”请求的引用者是控制器操作路由本身(奇怪)。然而,我也注意到第二个请求是与客户端断开连接,并且已经请求取消(我猜这就是为什么浏览器中的一切看起来都正常的原因)。我相信有了这些信息,以及对MVC/routes的更好理解,我最终可能会解释这一点

无论如何,我所做的是将我的PDF生成/显示代码包装在检查客户端连接中。如果断开连接,我将返回一个空的视图结果。就像我说的,总的解决办法,但它让我通过它,直到有人比我更聪明,可以解释发生了什么,以及如何修复它

if(Response.IsClientConnected)
{
如果(pdfId==0)
{
var model=_service.GetViewData(客户端,id);
model.StaffName=CTCHelper.GetStaffName(model.StaffId);
pdfId=_service.SavePDF(模型、控制器上下文);
}
var data=_service.GetPDF(pdfId);
var mimeType=“应用程序/pdf”;
AppendHeader(“内容处置”,“内联;文件名=TESI.pdf”);
返回文件(数据,mimeType);
}
Response.End();

返回新的ViewResult()我遇到了完全相同的问题。请记住,我不知道如何真正阻止这种情况发生,但我已经想出了一个解决办法,如果这有帮助的话。我查看了这两个请求,并注意到第二个“伪”请求的引用者是控制器操作路由本身(奇怪)。然而,我也注意到第二个请求是与客户端断开连接,并且已经请求取消(我猜这就是为什么浏览器中的一切看起来都正常的原因)。我相信有了这些信息,以及对MVC/routes的更好理解,我最终可能会解释这一点

无论如何,我所做的是将我的PDF生成/显示代码包装在检查客户端连接中。如果断开连接,我将返回一个空的视图结果。就像我说的,总的解决办法,但它让我通过它,直到有人比我更聪明,可以解释发生了什么,以及如何修复它

if(Response.IsClientConnected)
{
如果(pdfId==0)
{
var model=_service.GetViewData(客户端,id);
model.StaffName=CTCHelper.GetStaffName(model.StaffId);
pdfId=_service.SavePDF(模型、控制器上下文);
}
var data=_service.GetPDF(pdfId);
var mimeType=“应用程序/pdf”;
AppendHeader(“内容处置”,“内联;文件名=TESI.pdf”);
返回文件(数据,mimeType);
}
Response.End();

返回新的ViewResult()显示操作并不能帮助我们确定为什么它会被调用两次。这就像给我们看一颗子弹,让我们辨认凶手@DavidG我还应该提供什么信息?操作执行两次,但文件只生成一次。是吗?操作执行两次,文件创建两次,但浏览器仅显示一个选项卡和一个文档。请参阅编辑:浏览器行为。从“”中,听起来这是IE EdgeShowing的一个错误。该操作不会帮助我们确定为什么会调用它两次。这就像给我们看一颗子弹,让我们辨认凶手@DavidG我还应该提供什么信息?操作执行两次,但文件只生成一次。是吗?操作执行两次,文件创建两次,但浏览器仅显示一个选项卡和一个文档。请参阅编辑:浏览器行为。从“”中可以看出,这似乎是IE EdgeI的一个错误。我也这样做了。仍然没有找到正确的答案。我也这么做了。仍然没有找到正确的答案。