2014-12-09 1 views
0

У меня ошибка при использовании HttpContext.Current.Response.End(); при попытке загрузить csv файл. Я ищу ошибку и получаю решение. Используйте Обработчик, чтобы избежать Response.End();.Загрузить файл csv через HTTP-обработчик

Мой обработчик:

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("&lt;", "<"); 
     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

Что вы делаете после получения ответа? – dotnetstep

+0

@dotnetstep ничего нет ошибки. просто остановите страницу. –

ответ

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");