C# IE在请求完成之前提交文件下载

C# IE在请求完成之前提交文件下载,c#,.net,internet-explorer,download,httpresponse,C#,.net,Internet Explorer,Download,Httpresponse,我试图将一个文件提交给浏览器下载,但我遇到了一个奇怪的问题,即Internet Explorer在HTTP请求完成之前将文件下载提交给用户 这是我的密码: protected void btnSubmit_Click(object sender, EventArgs e) { var client = new System.Net.WebClient(); Byte[] buffer = client.DownloadData(pdfUrl); if (buffer !

我试图将一个文件提交给浏览器下载,但我遇到了一个奇怪的问题,即Internet Explorer在HTTP请求完成之前将文件下载提交给用户

这是我的密码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    var client = new System.Net.WebClient();
    Byte[] buffer = client.DownloadData(pdfUrl);

    if (buffer != null)
    {
        Response.BufferOutput = true;
        Response.Buffer = true;
        Response.AddHeader("content-type", client.ResponseHeaders["content-type"]);
        Response.AddHeader("Content-disposition", client.ResponseHeaders["content-disposition"]);
        Response.BinaryWrite(buffer);
        Response.Flush();
    }
}
但是,在HTTP请求完成之前,将显示浏览器底部的“是否要下载此文件”对话框

这意味着,如果用户在HTTP请求完成之前单击“打开”或“下载”,则会下载损坏或丢失的文件,从而导致错误

我原以为将
Response.Buffer
Response.BufferOutput
设置为
true
可以解决问题,但强制响应等待请求完成后再将文件呈现给浏览器,但事实并非如此

我怀疑该文件是在
Response.BinaryWrite
完成之前提交下载的

编辑:如果我在单击“打开/下载”之前等待HTTP请求完成,文件将完全打开/下载


编辑2:我注意到在处理HTTP请求时,IE不知道内容类型头;它仅在请求完成后接收此消息。我不认为这是问题所在,但值得注意。

无论问题是什么,我认为激励问题只是一个转移视线的问题。在文件下载完成之前提示保存是完全正常的。假设您正试图下载一个5GB文件,您真的想等到整个文件下载完毕后才有机会说该怎么处理它吗?我得出这个结论的原因是,如果我等到HTTP请求完成后,再单击“打开”,文件就会完全打开。