2012-01-17 12 views
16

Sto scrivendo una semplice pagina di test per scaricare un file di testo in un browser sul pulsante clic. Sto ottenendo un errore davvero strano che non ho mai visto prima. qualche idea?ASP.Net Scarica il file sul browser del client

L'errore si verifica su 'Response.End();' e il file non viene mai al browser del client

Codice:

string filePath = "C:\\test.txt"; 
    FileInfo file = new FileInfo(filePath); 
    if (file.Exists) 
    { 
    Response.ClearContent(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.ContentType = "text/plain"; 
    Response.TransmitFile(file.FullName); 
    Response.End(); 
    } 

Errore:

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

+1

rimuovere la fine e provare Responce.Flush() e Responce.ApplicationInstance.CompleteRequest(); – Aristos

+0

Una buona chiamata, che ha bloccato l'eccezione dall'essere lanciata. Ma il codice si completa ancora senza che nulla avvenga sul browser. ?? – tier1

risposta

26

Provare a cambiare a.

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "text/plain"; 
Response.Flush(); 
Response.TransmitFile(file.FullName); 
Response.End(); 
+0

Come prima, esegue il codice e genera un'eccezione su Response.End(). Sembra strano che Response.TransmitFile sia eseguito correttamente, ma il file non viene trasferito? – tier1

+0

In realtà, questo funziona. Grazie! – tier1

+1

@Ashwin: sto provando questa soluzione nel mio file code-behind (il mio problema è http://stackoverflow.com/questions/18599735/downloading-a-fileodinamico), ma non importa dove cerco di chiamare ' TransmitFile() 'o' WriteFile() 'Continuo a ricevere un'eccezione: ** Il server non può impostare il tipo di contenuto dopo che sono state inviate le intestazioni HTTP. ** Qualche suggerimento? –

7

Basta una leggera aggiunta alla soluzione di cui sopra, se si hanno problemi con il nome del file scaricato ...

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\""); 

Questo restituirà il nome esatto del file, anche se contiene spazi o altri caratteri.