尝试下载 csv 文件时,我使用HttpContext.Current.Response.End();
收到错误消息。
我搜索错误并获得解决方案。使用处理程序以避免Response.End();
。
我的经纪人:
public class DownloadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string table = HttpContext.Current.Request.QueryString["table"].ToString();
string fileName = HttpContext.Current.Request.QueryString["fileName"].ToString();
table = table.Replace(">", ">");
table = table.Replace("<", "<");
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + fileName + "_" + DateTime.Now.ToString("M_dd_yyyy_H_M_s") + ".csv");
HttpContext.Current.Response.ContentType = "application/text";
HttpContext.Current.Response.Write(table);
}
public bool IsReusable
{
get
{
return false;
}
}
}
我按这样的按钮点击这个处理程序。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("Mypath/DownloadHandler.ashx?table=" + csv + "&fileName=User-Report");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
它调用处理程序。我没有错误但是没有下载csv文件?我无法弄清楚哪里是一个真正的问题。我可能在代码中遗漏了什么吗?谢谢你的帮助。
注意:csv是来自另一个不是真正问题的进程的字符串。
答案 0 :(得分:4)
如果你正在做HttpWebRequest,那么你必须请求getResponse。从响应流中读取并保存。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:57169/DownloadHandler.ashx?table=tttex&fileName=User-Report");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
byte[] data = new System.IO.BinaryReader(response.GetResponseStream()).ReadBytes((int)response.ContentLength);
System.IO.File.WriteAllBytes("C:\\Temp.csv", data);
如果您想要浏览器下载,那么只需执行以下操作即可。
Response.Redirect("http://yourpath/DownloadHandler.ashx?table=tttex&fileName=User-Report");