C# 使用EPPlus写入HTTP响应不起作用

C# 使用EPPlus写入HTTP响应不起作用,c#,export-to-excel,httpresponse,epplus,C#,Export To Excel,Httpresponse,Epplus,我正在使用EPPlus库将数据写入Excel。我希望能够在HTTP响应对象中写入精细的内容,并将其发送出去,这样客户机将获得一个文件另存为对话框,并可以选择保存文件的位置 到目前为止,在网上搜索了很多之后,我仍然没有成功,下面是我的代码片段- 我试过了- using (ExcelPackage package = new ExcelPackage()) { //Writing data to the worksheet Response.Clear(); Respons

我正在使用EPPlus库将数据写入Excel。我希望能够在HTTP响应对象中写入精细的内容,并将其发送出去,这样客户机将获得一个文件另存为对话框,并可以选择保存文件的位置

到目前为止,在网上搜索了很多之后,我仍然没有成功,下面是我的代码片段-

我试过了-

using (ExcelPackage package = new ExcelPackage())
{
    //Writing data to the worksheet

    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;  filename=file.xlsx");
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";                    
    Response.BinaryWrite(package.GetAsByteArray());
    Response.End();
}
所有联机链接都显示相同的代码,但这不起作用。也没有客户端或服务器端错误

有什么想法吗

编辑:如果这段代码有效,调用这段代码的客户端可能会出现问题?我对请求-响应模型没有太多经验,很有可能我搞砸了

我提出了一个post请求,其中包含要写入文件的内容-

$post("/app/Services/ExcelDownloadHandler.ashx", { "columnValues": columnValues });
在ExcelDownloadHandler.ashx中,我有

    public void ProcessRequest(HttpContext context)
    {
        var r = context.Response;
        Models.DTData excelData = (Models.DTData)Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Form["columnValues"], typeof(Models.DTData));

        //Write excelData to worksheet using EPPlus

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;  filename=file.xlsx");
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";                    
        Response.BinaryWrite(package.GetAsByteArray());
        Response.End();
    }

//一旦我对响应执行二进制写入,我应该会在浏览器上获得文件保存对话框,对吗?

我也遇到了同样的问题。添加此处显示的四条注释行会出现提示,允许用户在IE11中打开、保存或另存为。

//将其写回客户端
Response.ClearContent()//明确当前响应的内容。
Response.BufferOutput=true//发送前的缓冲区输出。
Response.ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
AddHeader(“内容处置”、“附件;文件名=ExportData.xlsx”);
BinaryWrite(pck.GetAsByteArray());
Response.Flush()//将缓冲输出发送到客户端。

Response.End()//停止rqst。过程引发EndRequest事件。

I使用类似以下代码的EPPLUS:

            MemoryStream ms = new MemoryStream();
            pkg.SaveAs(ms);
            byte[] ba = ms.GetBuffer();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachement; filename=ExportData.xlsx");
            HttpContext.Current.Response.AddHeader("Content-Length", ba.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            HttpContext.Current.Response.BinaryWrite(ba);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

你能检查一下pck.GetAsByteArray()返回的是什么吗?@AntonioBakula我检查过了,它确实有内容,一个几千字节的数组。它怎么不工作?我试过你的代码,它工作正常,试着做一个简单的新项目来隔离可能的其他问题我刚做了一个新的ASP.NET应用程序,表单上有一个按钮,这个代码在button onClick事件中:它工作正常首先你做的请求不是“Post请求”,而是一个指向url的ajax帖子。我猜你是想把Ashx中的Excel文件直接输入javascript代码?这是不可能的,因为javascript不知道要发送的数据类型。将javascript中的ByTestStream解析为excel文档时,这是可能的。。。我不推荐的!尝试一些简单的方法,比如做asp回发!